【发布时间】:2018-07-25 07:09:58
【问题描述】:
我正在试验 Promise.all,但是当我首先将它们推入数组时,这些函数就会运行,那么 promise.all 的意义何在?这是一个例子:
async function foo(args) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(args)
resolve(args)
}, 500)
});
}
function init() {
var params = [10, 20, 30];
var promises = [];
for (let x of params) {
promises.push(foo(x));
}
//do something with Promise.all(promises) here
return;
}
init();
输出:
10
20
30
我做错了什么?我敢肯定这很愚蠢,我可能会失明。
编辑: 抱歉,我应该澄清一下,我知道如何实际调用 Promise.all,但我的印象是,在你调用之后,promise 才会运行。
我想我要问的是是否有一种方法可以“查询”这些函数,以便在我运行 Promise.all() 之前它们不会立即运行?
编辑 2:
我看到这被标记为重复/人们说这与 promise.all 无关,我希望尽可能在最后将函数与 promise.all 一起使用,而不是按照建议的手动操作链接的帖子。
如果不可能,请告诉我。
【问题讨论】:
-
你期待什么输出?你期待
[10, 20, 30]在承诺中吗? -
现在,您已经完全改变了您的问题。您是否因为我回答您最初的问题而对我的回答投了反对票?
-
我没有投反对票。
-
“在你调用 [promise.all] 之后才会运行承诺的印象”是可疑的。 a) Promise 不会运行,它们是接口对象。 b) 提供给 Promise 构造函数的 executor 函数被同步调用,并在构造函数返回创建的新 Promise 对象之前返回。记录的输出完全符合预期,因为您已将结果记录在计时器回调中,这些回调的执行顺序与放置在计时器队列中的顺序相同。在进行承诺组合之前指定任务要求可能会有所帮助。
标签: javascript node.js promise