Nodejs识别asyntasks的输出

时间:2016-06-06 16:50:56

标签: node.js asynchronous request synchronous

我是nodejs的新手,我正在使用请求nodejs api发出多个get请求, 有了这个,我无法弄清楚特定请求的输出。如何单独识别每个请求的响应?我使用for循环发送多个请求。如果我使用递归,它会再次同步,我只需要将请求与异步的响应分开。有可能吗?

在下面的代码变量中,'i'被最后一次迭代替换。

var list = [ 'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%20Mobiles%20with%20best&phrase2=Mobiles%20with%20best',
      'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%2520Mobiles%2520with%2520best&phrase2=what%20is%20a%20processor']

function ss(list){
    for(var i in list) {
        request(list[i], function (error, response, body) {
            if (!error && response.statusCode == 200) {
                console.log( i + " " +body);
            }
        })
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用async library执行异步请求。 您可以使用async.eachasync.eachSeries

其中两个之间的区别在于each将并行运行所有请求,就像for循环一样,但会保留上下文,而不是eachSeries将一次运行一个请求(第二次迭代将仅在您调用第一次回调函数时开始)。此外 - 还有其他选项可用于更具体的用例(例如eachLimit)。

使用each的示例代码:

var list = [ 'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%20Mobiles%20with%20best&phrase2=Mobiles%20with%20best',
      'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%2520Mobiles%2520with%2520best&phrase2=what%20is%20a%20processor']

function ss(list){
    async.each(list, function(listItem, next) {
        request(listItem, function (error, response, body) {
            if (!error && response.statusCode == 200) {
                console.log( listItem + " " +body);
            }

            next();
            return;
        })
    },
    //finally mehtod
    function(err) {
        console.log('all iterations completed.')
    })
}