首页 > 解决方案 > 为什么这个 Promise.all() 即使在所有承诺都解决之后也没有解决?

问题描述

由于某种原因 Promise.all() 没有触发,即使所有的承诺都已被验证解决。这怎么可能发生,或者我该如何进一步调试?

Promise 本身正在调用具有回调的第 3 方库函数,并且正在回调中解决。

let promises = [];

for (let i = 0; i < payments.length; i++) {

    let p = new Promise((resolve, reject) => {

        setTimeout(() => {
            this.lib.createToken(result => {
                if (result.error) {
                    reject(false);
                    console.log('rejected', result.error.message);
                } else {
                    resolve(result.token);
                    console.log('resolved', result.token);
                }
            });
        }, (500 * i));

    });

    promises.push(p);
}

console.log('payment promises: ', promises.length);

Promise.all(promises).then(results => {

    console.log('promise all reached', results);

}).catch(reason => {
    console.log(reason);
});

这是控制台输出:

payment promises: 2
resolved token1
resolved token2

// promise all reached – this is never reached!

另一件奇怪的事情是这种情况只是间歇性地发生……比如 1/10 次。

编辑:

如果我在 Promise.all() 上设置断点,它会显示 Promise: Array(2) of ZoneAwarePromise's。有趣的是,当使用断点并在之后恢复时,它将 100% 的时间挂起,而不是间歇性地没有断点。

标签: javascriptpromisees6-promise

解决方案


推荐阅读