javascript - 为什么这个 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% 的时间挂起,而不是间歇性地没有断点。
解决方案
推荐阅读
- solr - 在 SOLR 中,我如何提及不应更改起始字符?
- javascript - Docker 抛出 SyntaxError: Unexpected token ':'
- android - 更新后TextView字符串消失
- html - 如何设置图像大小以适应 CSS 和 HTML 并使其看起来相同
- c++ - 释放从函数返回的动态数组
- types - SML 数据类型转换:绑定并不详尽
- haskell - 编写两个 Traversal,对中间层具有只读权限
- java - 逐行阅读字母
- amazon-web-services - 指定位置的脚本:scripts/register_with_elb.sh 未能在 3600 秒内完成
- html - 使用 HTML 构建它的边距时遇到问题