我正在开发一个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函数&amp;只有当前一个异步调用返回时,才为下一个用户进行下一次addWAtcher调用(即,逐个为每个用户移动到下一个异步调用,而不是一次性激活对addwatcher的所有调用。)
我该怎么做?
请指教,
谢谢!
答案 0 :(得分:1)
你应该看看async
模块。
您可以使用async.each()
功能。该函数接受一个项目数组,然后迭代它们调用一个包装函数,该函数接受该项作为参数。完成所有调用后,指定要调用的最终函数。
其他解决方案可以async.parallel()
(如果您不介意并行运行它们。
归功于this精彩教程