当 promise 被多次解析并且协程有下一个 yield 时,协程将如何表现
How will coroutine behaves when the promise is resolved multiple times and co-routine have next yield
对于 promise 和协程,我在 NodeJs 中使用了 bluebird npm 包。
当 promise 被多次解析时,有人可以帮助理解以下代码的行为。
问题:
promise多次resolve时协程会发生什么?
第2次的收益率会不会受到第1次收益率的倍数影响
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
returns 都是一个不同的新承诺。
否,因为假设不正确。第一次 yield 不会多次 yield,它 returns 一秒钟后解决的承诺。它在一个生成器函数中,它在上一个 yield 之后的行恢复(我最后一次检查)。协程是关于在之前的 yield 中返回的 promise 完成后调用生成器函数。有关详细信息,请参阅 http://bluebirdjs.com/docs/api/promise.coroutine.html。
对于 promise 和协程,我在 NodeJs 中使用了 bluebird npm 包。
当 promise 被多次解析时,有人可以帮助理解以下代码的行为。
问题:
promise多次resolve时协程会发生什么?
第2次的收益率会不会受到第1次收益率的倍数影响
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
returns 都是一个不同的新承诺。否,因为假设不正确。第一次 yield 不会多次 yield,它 returns 一秒钟后解决的承诺。它在一个生成器函数中,它在上一个 yield 之后的行恢复(我最后一次检查)。协程是关于在之前的 yield 中返回的 promise 完成后调用生成器函数。有关详细信息,请参阅 http://bluebirdjs.com/docs/api/promise.coroutine.html。