#javascript #typescript #dom #ecmascript-6 #iterator
#javascript #typescript #dom #ecmascript-6 #итератор
Вопрос:
Я пытаюсь использовать Headers
итератор в соответствии с документами итератора.
let done = false
while ( ! done ) {
let result = headers.entries()
if ( result.value ) {
console.log(`yaay`)
}
if ( result.done ) {
console.log(`finished`)
done = true
}
}
Я получаю сообщение об ошибке машинописного текста:
Property 'value' does not exist on type 'IterableIterator<[string, string]>'.
Но согласно спецификации, свойство value
должно существовать в любом итераторе, и headers.entries()
возвращает итератор.
Как мне получить значения из объекта Headers?
Комментарии:
1.
done
иvalue
являются ли свойства объекта, возвращаемые изnext()
.2. @tkausl ах, вот и все — вы хотите добавить это в качестве ответа, и я приму?
Ответ №1:
Но согласно спецификации, свойство
value
должно существовать на любомIterator
Нет, он существует в объекте результата итератора, который Iterator
.next()
возвращает метод. Итак, вы бы сделали
const iter = headers.entries();
let { value, done } = iter.next();
while (!done) {
console.log('yay', value);
({ value, done } = iter.next());
}
console.log('finished');
Однако вы никогда не внедрили бы протокол итерации самостоятельно. Вы просто используете for … of
:
for (const value of headers.entries()) {
console.log('yay', value);
}
console.log('finished');
Ответ №2:
Вы можете использовать Array.from(headers)
и использовать обычные методы map / forEach для манипулирования.
const headers= new Headers({some: 'thing'})
Array.from(headers).forEach(([key,val])=>{console.log(key,val)})