итерации по Symbol.iterator не происходит - PullRequest
0 голосов
/ 01 октября 2018

Node.js v10.11.0

Почему итерация не происходит в моем коде?

'use strict';
const stuff = Object.create(null)
stuff.items = ['a','b','c','d']
stuff[Symbol.iterator] = function*(){
    return this.items[Symbol.iterator]()
}
for(let n of stuff){
    console.log(n) // It doesn't happen
}

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Установите итератор stuff в качестве итератора items:

const stuff = Object.create(null)

stuff.items = ['a','b','c','d']

stuff[Symbol.iterator] = stuff.items[Symbol.iterator].bind(stuff.items);

for(let n of stuff){
    console.log(n) // It doesn't happen
}
0 голосов
/ 01 октября 2018

Ваша функция генератора ничего не делает yield, вы только возвращаете другой итератор, но возвращаемое значение игнорируется в for..of.Вместо этого вы либо выдаете записи другого итератора:

 stuff[Symbol.iterator] = function*(){
   yield* this.items[Symbol.iterator]();
 };

, либо превращаете функцию генератора в обычную (удалите *):

stuff[Symbol.iterator] = function() {
   return this.items[Symbol.iterator]();
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...