Node.js:等待异步调用的响应

时间:2015-11-12 20:30:04

标签: javascript node.js asynchronous callback node-webkit

我正在开发一个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的所有调用。)

我该怎么做?

请指教,

谢谢!

1 个答案:

答案 0 :(得分:1)

你应该看看async模块。

您可以使用async.each()功能。该函数接受一个项目数组,然后迭代它们调用一个包装函数,该函数接受该项作为参数。完成所有调用后,指定要调用的最终函数。 其他解决方案可以async.parallel()(如果您不介意并行运行它们。

归功于this精彩教程