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()
(如果你不介意并行运行它们)。
信贷这个伟大的教程