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

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

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

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 ответ

Решение

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

 let obj = {};
 while(true) {
    obj = yield { name: obj.name };
 }
Другие вопросы по тегам