Javascript 当承诺被多次解决并且共同例程具有下一个收益时,协同例程将如何表现
对于promise&co例程,我在NodeJs中使用了bluebird npm包 当promise被多次解析时,请有人帮助理解下面代码的行为 问题:Javascript 当承诺被多次解决并且共同例程具有下一个收益时,协同例程将如何表现,javascript,node.js,generator,es6-promise,yield-keyword,Javascript,Node.js,Generator,Es6 Promise,Yield Keyword,对于promise&co例程,我在NodeJs中使用了bluebird npm包 当promise被多次解析时,请有人帮助理解下面代码的行为 问题: 当承诺多次得到解决时,协程会发生什么 第二个收益率将受到第一个收益率倍数的影响 const蓝鸟=需要(“蓝鸟”) 没什么resolve和reject作为一对匿名函数由promise构造函数发出。一旦其中一个被调用,对其中任何一个的进一步调用都将被忽略 注意:每次调用func1时都会调用新的间隔计时器,而不会停止以前启动的计时器,因此控制台输出看起
resolve
和reject
作为一对匿名函数由promise构造函数发出。一旦其中一个被调用,对其中任何一个的进一步调用都将被忽略
注意:每次调用func1
时都会调用新的间隔计时器,而不会停止以前启动的计时器,因此控制台输出看起来会很混乱
此外,每次调用func1
都会返回不同的新承诺resolve
和reject
作为一对匿名函数由promise构造函数发出。一旦其中一个被调用,对其中任何一个的进一步调用都将被忽略
注意:每次调用func1
时都会调用新的间隔计时器,而不会停止以前启动的计时器,因此控制台输出看起来会很混乱
此外,每次调用func1
都会返回不同的新承诺谢谢你的回复。第一次解析承诺后,co例程将移动到下一行执行,然后解析将不会产生任何影响或内存损失?简短回答,是的。协同程序不会保留对承诺的引用,只会在每个承诺产生时调用其then方法。你不应该像保存任何东西一样,保存一个不断增长的、永久性的承诺对象或其解析/拒绝函数列表-这是另一个名称的内存泄漏。谢谢你的回复。第一次解析承诺后,co例程将移动到下一行执行,然后解析将不会产生任何影响或内存损失?简短回答,是的。协同程序不会保留对承诺的引用,只会在每个承诺产生时调用其then方法。您不应该像保存任何内容的列表一样,保存一个不断增长的、永久性的承诺对象或其解析/拒绝函数列表-这是另一个名称的内存泄漏。
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);
}
});