【发布时间】:2018-09-25 17:49:31
【问题描述】:
如果使用非空数组调用 Promise.all 或 Promise.race,它们会返回待处理的 Promise:
console.log(Promise.all([1]));
// prints Promise {<pending>}
console.log(Promise.race([1]));
// returns Promise {<pending>}
如果使用空数组调用 Promise.race,它会返回一个待处理的 Promise:
console.log(Promise.race([]));
// prints Promise {<pending>}
但是如果 Promise.all 是用一个空数组调用的,它会返回一个已经解析的 Promise:
console.log(Promise.all([]));
// prints Promise {<resolved>: Array(0)}
为什么要这样设计 Promise.all 函数?似乎没有充分的理由导致不一致,但也许我遗漏了一些东西。
【问题讨论】:
-
它在文档(竞赛)中定义:“如果传递的可迭代对象为空,则返回的承诺将永远挂起。” Promise.all 文档:“如果传递了一个空的可迭代对象,则此方法(同步)返回一个已解决的承诺。”
-
是有道理的,因为一切都什么都不是,但永远无法确定先入为主
-
您是否有任何具体原因希望
.all像.race一样工作……反之亦然? -
不,我只是想更深入地了解 Promise,令我感到奇怪的是 when.all([]) 返回一个已经解决的 Promise(而不是在下一个解决打钩)。我想知道我是否遗漏了一些潜在的概念。
标签: javascript promise es6-promise