对于承诺和协程,我在NodeJs中使用了bluebird npm包。
当承诺多次解决时,有人可以帮助理解以下代码的行为吗?
问题:
-
当承诺多次解决时,协程会发生什么情况?
-
第二个收益率是否会受到第一个收益率的倍数收益率的影响。
const Bluebird = require("Bluebird"(;
function func1() { return new bluebird((resolve, reject) => { let c = 0; let iterval = SetInterval(() => { c++; let cc = c; console.log(`c=${c}`); if(cc === 20) { clearInterval(interval); } resolve(true); }, 1000); }); } let run1 = bluebird.coroutine(function*() { try { yield func1(); yield func1(); yield func1(); yield func1(); } catch (e) { console.dir(e); } });
-
无。
resolve
和reject
由 promise 构造函数作为一对匿名函数发出。一旦调用了其中一个,对其中一个的进一步调用将被忽略。请注意,每次调用
func1
时都会调用新的间隔计时器,而不会停止先前启动的计时器,因此预计控制台输出看起来很混乱。此外,每次调用
func1
都会返回不同的新承诺。 -
否,因为假设不正确。第一个 yield 不会多次产生,它会返回一个在一秒后解析的承诺。它位于生成器函数中,该函数在上一个产量(我上次检查(后在行恢复。协程是关于在上一个收益率中返回的承诺被解决后调用生成器函数。有关更多详细信息,请参阅 http://bluebirdjs.com/docs/api/promise.coroutine.html。