我读了有关生成器功能的信息,我认为它与 async await 或多或少相同,但预期结果与实际结果不同。
function* adding() {
var result = 1 + 1
return 20 + (yield result)
}
var sum = adding()
console.log(sum.next()) // not returning 22 but 2?
console.log(sum.next(10)) // where is 30 come from?
该yield
关键字暂停发电机的功能。当您.next()
第一次调用时,解释器会遍历生成器,直到遇到第一个yield
. 生成器将在那里暂停,并将 后面的表达式返回yield
给 的调用者.next()
。因此,由于result
从 2 开始,yield result
导致第一个.next()
调用返回 2。
当您.next()
使用表达式调用时,该表达式将被替换到最后一次暂停所在的生成器函数中yield
。所以,当.next(10)
被调用时,这里的这一行:
return 20 + (yield result)
变成
return 20 + (10)
因为10
是传递给.next()
. 所以,最后20 + 10
返回的是 30。
如您所见,生成器与/完全不同,尽管它们都处理控制异步程序流。async
await
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句