Генератор Javascript: как получить объект в качестве параметра для создания другого объекта? - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь получить объект «шаблон» в качестве входных данных для генератора, чтобы получить другие объекты.Я мог бы изменить шаблон непосредственно перед каждым поколением.

Он почти работает, как и ожидалось, но у меня возникла следующая проблема.Я просто собрал упрощенный пример проблемы здесь:

function* generator () {
    while(true) {
        let obj = yield
        yield {
            name: obj.name
        }
    }
}
let gen = generator()

let obj = {
    name: 'name'
}
gen.next(obj)

obj.name = 'test'
for(let i=3; i--; ) {
    let item = gen.next(obj).value
    console.log(JSON.stringify(item))
}

Я ожидал получить в результате:

{name: test}
{name: test}
{name: test}

Однако я получаю:

{name: test}
undefined
{name: test}

1 Ответ

2 голосов
/ 02 мая 2019

Потому что ты yield дважды, один раз ничего не дав.Выход только один раз:

 let obj = {};
 while(true) {
    obj = yield { name: obj.name };
 }
...