微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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()不会干扰或影响承诺本身的执行顺序/时间.

原文地址:https://www.jb51.cc/js/155391.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐