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}

导致您两次yield,一次什么都没有。仅一次:

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

相关内容

最新更新