Node.js:等待来自asynchronous调用的响应

我正在开发一个API,通过它我可以添加一个用户列表作为JIRA观察者(所以我正在和JIRa REST API交谈)

这是这样做的function:

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); }); } 

投票对象具有上面显示的用户列表。 现在的问题是,当我执行这个函数时,由于节点的asynchronous性质,for循环被完全执行,所有的asynchronous调用一次被触发。 (这不适合我,因为JIRa REST API似乎不支持这个)

我想改变上面的代码,以便我一次一个用户地调用addWatcher函数,并且只有在前一个asynchronous调用已经返回的情况下,才为下一个用户进行下一个addWAtcher调用(即移动到下一个每个用户一个一个的asynchronous调用,而不是所有的调用addwatcher一次。

我怎样才能做到这一点?

请指教,

谢谢!

你应该看看async模块。

你可以使用async.each()函数。 该函数接受一组项目,然后遍历它们,调用一个接受该项目作为参数的包装函数。 当所有的调用完成后,你指定一个最终的函数被调用。 其他解决scheme可以是async.parallel() (如果你不介意并行运行它们)。

信贷这个伟大的教程