Node.js 等到所有的承诺都完成
我如何知道for循环中的所有承诺何时完成执行?有更好的方法吗Node.js 等到所有的承诺都完成,node.js,Node.js,我如何知道for循环中的所有承诺何时完成执行?有更好的方法吗 for (let index = 0; index < array.length; index++) { request(array[index], function (error, response, body) { promise1().then(result1 => { if (result1 !== 0) { promise2().then(result2 => {
for (let index = 0; index < array.length; index++) {
request(array[index], function (error, response, body) {
promise1().then(result1 => {
if (result1 !== 0) {
promise2().then(result2 => {
promise3(result2);
}
} else {
promise3(result1);
}
});
});
}
console.log('all promises finished');
for(让index=0;index{
如果(结果1!==0){
承诺2()。然后(结果2=>{
承诺人3(结果2);
}
}否则{
承诺3(结果1);
}
});
});
}
log(“所有承诺完成”);
通过将代码转换为使用async
/wait
将项目映射为承诺,然后使用标准的Promise.all()
函数等待所有承诺的解决,这将变得更容易:
// promisified request()
const requestP = item =>
new Promise((resolve, reject) => {
request(item, (error, response, body) => {
if (error) return reject(error);
resolve({ response, body });
});
});
const processItem = async item => {
const { response, body } = await requestP(item);
const result1 = await promise1(/* this probably uses response or body? */);
if (result1 !== 0) {
const result2 = await promise2();
return await promise3(result2);
} else {
return await promise3(result1);
}
};
const promises = array.map(processItem);
Promise.all(promises).then(() => {
console.log("all promises finished");
});
通过将代码转换为使用
async
/wait
将项目映射为承诺,然后使用标准的Promise.all()
函数等待所有承诺的解析,这会变得更容易:
// promisified request()
const requestP = item =>
new Promise((resolve, reject) => {
request(item, (error, response, body) => {
if (error) return reject(error);
resolve({ response, body });
});
});
const processItem = async item => {
const { response, body } = await requestP(item);
const result1 = await promise1(/* this probably uses response or body? */);
if (result1 !== 0) {
const result2 = await promise2();
return await promise3(result2);
} else {
return await promise3(result1);
}
};
const promises = array.map(processItem);
Promise.all(promises).then(() => {
console.log("all promises finished");
});
您可以继续添加在
for循环
内的列表中创建的承诺
完成循环后,可以注册Promise.all
方法
let list_of_promises = [];
for(...) {
list_of_promises.push(
new Promise(function(resolve, reject)) {
...
}
)
}
Promise.all(list_of_promises).then(function(data)) {
...
}.catch(function(err) {
...
});
如果所有的承诺
都得到解决,。那么将调用
方法
注意:即使您的一个承诺失败,它也会进入
.catch
方法。您可以继续添加您在for循环内的列表中创建的承诺
let list_of_promises = [];
for(...) {
list_of_promises.push(
new Promise(function(resolve, reject)) {
...
}
)
}
Promise.all(list_of_promises).then(function(data)) {
...
}.catch(function(err) {
...
});
完成循环后,可以注册Promise.all
方法
let list_of_promises = [];
for(...) {
list_of_promises.push(
new Promise(function(resolve, reject)) {
...
}
)
}
Promise.all(list_of_promises).then(function(data)) {
...
}.catch(function(err) {
...
});
如果所有的承诺
都得到解决,。那么将调用
方法
注意:即使其中一个承诺失败,它也会进入.catch
方法。如果导入异步模块,可以创建异步瀑布来顺序处理承诺。如果导入异步模块,可以创建异步瀑布来顺序处理承诺。
let list_of_promises = [];
for(...) {
list_of_promises.push(
new Promise(function(resolve, reject)) {
...
}
)
}
Promise.all(list_of_promises).then(function(data)) {
...
}.catch(function(err) {
...
});