Promise.All方法可以并行运行多个方法,即使没有解析?

问题描述 投票:0回答:1

我对Promise感到陌生,我知道基本的Promise会采用一种方法来处理类似(resolve, reject) => { ... }的函数并相应地处理结果,因此Promise.all似乎可以并行处理一系列函数。但是,我也在Promise中看到了一些函数用法,这些用法不是将(resolve, reject)作为输入,而只是将new Promise(() => { return 1 + 1;})作为输入,因此,如果我有几个不需要resolve的函数,例如

function sum(a, b) { return a + b; }
function sub(a, b) { return a - b; }
function multiple(a, b) { return a * b; }

如果我在三个函数上使用Promise.all,这是否意味着我正在并行运行其中三个函数?像

之类的东西
Promise.all([()=>sum(1,2), ()=>sub(1,2), ()=>multiple(1,2)])

总体来说,Promise.all是一个概念,我们可以并行运行多个javascript方法(是否异步,是否解析)?

javascript es6-promise
1个回答
0
投票

[否,Promise.all会收到像Array这样的迭代器。因此,当您调用promise.all时,它会遍历传递的元素。如果它们是函数,则执行它们并返回返回值,然后检查该值,从而使这些函数同步运行。现在进一步列出了如何评估值。

var p = Promise.all([]); // will be immediately resolved
var p2 = Promise.all([1337, "hi"]); // non-promise values will be ignored, but the evaluation will be done asynchronously just once for promise.all
console.log(p);
console.log(p2)
setTimeout(function() {
    console.log('the stack is now empty');
    console.log(p2);
});

// logs
// Promise { <state>: "fulfilled", <value>: Array[0] }
// Promise { <state>: "pending" }
// the stack is now empty
// Promise { <state>: "fulfilled", <value>: Array[2] }
© www.soinside.com 2019 - 2024. All rights reserved.