[英]Node.js: wait for the response from an async call
我正在開發一個 API,通過它我應該能夠添加一個用戶列表作為 JIRA 觀察者(所以我正在與 JIRa REST API 交談)
這是執行此操作的函數:
for (var i = 0; i < votes.totalValue; i++) {
var voter = {
user : votes.rawVoteData[i].user,
value : votes.rawVoteData[i].value,
email : votes.rawVoteData[i].email,
fname : votes.rawVoteData[i].fname,
lname : votes.rawVoteData[i].fname
};
// Add these users as watchers to the Jira
jira.jira.addWatcher(issueId, voter.user, function(err, result){
// TODO: Return to callback
rep++;
console.log('user='+voter.user);
console.log(result);
});
}
投票對象具有上面顯示的用戶列表。 現在的問題是,當我執行這個函數時,由於節點的異步性質,for 循環被完全執行,然后所有的異步調用都被立即觸發。 (這對我不起作用,因為 JIRa REST API 似乎不支持這一點)
我想更改上面的代碼,以便我一次為一個用戶調用 addWatcher 函數,並僅在上一個異步調用返回時才為下一個用戶調用下一個 addWAtcher 調用(。即移動到下一個為每個用戶一個一個地異步調用,而不是一次觸發所有對 addwatcher 的調用。)
我怎樣才能做到這一點?
請指教,
謝謝!
你應該看看async
模塊。
您可以使用async.each()
函數。 該函數接受一個項目數組,然后遍歷它們,調用一個接受該項目作為參數的包裝函數。 當所有調用完成后,您指定要調用的最終函數。 其他解決方案可以是async.parallel()
(以防您不介意並行運行它們。
歸功於這個偉大的教程
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.