当多次解析承诺并且协程具有下一个收益时,协程将如何表现



对于承诺和协程,我在NodeJs中使用了bluebird npm包。

当承诺多次解决时,有人可以帮助理解以下代码的行为吗?

问题:

  1. 当承诺多次解决时,协程会发生什么情况?

  2. 第二个收益率是否会受到第一个收益率的倍数收益率的影响。

    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);
        }
    });
    
  1. 无。 resolvereject 由 promise 构造函数作为一对匿名函数发出。一旦调用了其中一个,对其中一个的进一步调用将被忽略

    请注意,每次调用func1时都会调用新的间隔计时器,而不会停止先前启动的计时器,因此预计控制台输出看起来很混乱。

    此外,每次调用func1都会返回不同的新承诺。

  2. 否,因为假设不正确。第一个 yield 不会多次产生,它会返回一个在一秒后解析的承诺。它位于生成器函数中,该函数在上一个产量(我上次检查(后在行恢复。协程是关于在上一个收益率中返回的承诺被解决后调用生成器函数。有关更多详细信息,请参阅 http://bluebirdjs.com/docs/api/promise.coroutine.html。

相关内容

  • 没有找到相关文章

最新更新