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

前端之家收集整理的这篇文章主要介绍了javascript – 为什么我的Promises数组在调用Promise.all()之前运行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图创建一个Promises数组,然后使用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
});

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

我认为他们应该在promiseArray中处于非活动状态,并且Promise.all(promiseArray)将启动它们并解决它们.

这是否意味着我两次开始他们?

解决方法

你不是两次开始他们. Prom一旦创建就开始运行 – 或者只要JS引擎找到足够的资源来启动它们.你无法控制他们何时真正开始.

所有Promise.all()都会等待所有人解决(解决或拒绝). Promise.all()不会干扰或影响承诺本身的执行顺序/时间.

猜你在找的JavaScript相关文章