为什么我的 Promise 数组在调用 Promise.all() 之前运行?

2024-01-10

我正在尝试创建 Promise 数组,然后使用 Promise.all() 解析它们。我正在使用 got,它返回一个承诺。

我的代码可以工作,但我不完全理解如何工作。这里是:

const got = require('got');

const url = 'myUrl';
const params = ['param1', 'param2', 'param3'];

let promiseArray = [];
for (param of params) {
    promiseArray.push(got(url + param));
}

// Inspect the promises
for (promise of promiseArray) {
    console.log(JSON.stringify(promise));
    // Output: promise: {"_pending":true,"_canceled":false,"_promise":{}}
}

Promise.all(promiseArray).then((results) => {
     // Operate on results - works just fine
}).catch((e) => {
    // Error handling logic
});

让我失望的是,当我将 Promise 添加到数组中时,它们被标记为“pending”,这意味着它们已经开始了。

我认为他们应该不活跃promiseArray, and Promise.all(promiseArray)都会启动它们并解决它们。

这是否意味着我要启动它们两次?


你不会启动它们两次。一旦创建 Promise,或者一旦 JS 引擎找到足够的资源来启动它们,Promise 就会开始运行。您无法控制它们何时真正开始。

All Promise.all()要做的就是等待所有这些都解决(解决或拒绝)。Promise.all()不干扰或影响承诺本身的执行顺序/时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 Promise 数组在调用 Promise.all() 之前运行? 的相关文章

随机推荐