[英]How to wait for N number of async functions to finish in node.js so that I can do some work on all their combined results?
[英]How to wait for all async tasks to finish in Node.js?
我的程序需要運行許多異步任務。
所有異步任務完成后,必須運行一項任務。
如何讓這個函數等待所有異步函數?
let urls=[....]
for(var i=0; i<urls.length; i++){
doRequest(urls[i])
}
finish()
function doRequest(url){
request({
uri: url,
}, function(error, response, body) {
//do some tasks
});
}
function finish(){
console.log('finish')
}
承諾正是您所需要的。 它們現在在JS中是原生的,不需要額外的庫。
function finish () {
console.log("finish");
}
function doRequest (uri) {
// wrap code in promise
return new Promise((resolve, reject) => {
request(
{ uri },
(error, response, body) => {
if (error) {
// error case, similar to "throw"
reject(error);
}
else {
// success case, similar to "return"
resolve({ response, body });
}
}
);
});
}
let urls=[...];
// Basic way to do it:
Promise.all(urls.map(doRequest)).then(finish);
// async/await notation:
// you must be in an "async" environement to use "await"
async function wrapper () {
await Promise.all(urls.map(doRequest));
finish();
}
// async function return a promise transparently
wrapper();
不需要使用promises重寫所有內容的最簡單的解決方案是在doRequest
函數結束時檢查已完成請求的數量,如果所有請求都已finish
則調用finish
。
let urls=[....]
let completed = 0
for(var i=0; i<urls.length; i++){
doRequest(urls[i])
}
function doRequest(url){
request({
uri: url,
}, function(error, response, body) {
//do some tasks
completed++
if (completed === urls.length) {
finish()
}
});
}
function finish(){
console.log('finish')
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.