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

Node.js: wait for the response from an async call

本文关键字:调用 响应 异步 等待 js Node      更新时间:2023-09-26

我正在开发一个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()(以防您不介意并行运行它们。

归功于这个伟大的教程