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