【问题标题】:Nodejs Identify output of asyntasksNodejs 识别异步任务的输出
【发布时间】:2016-06-07 01:58:10
【问题描述】:

我是 nodejs 新手,我正在使用 request 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);
            }
        })
    }
}

【问题讨论】:

    标签: node.js asynchronous request synchronous


    【解决方案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.')
        })
    }
    

    【讨论】:

    • 它的工作方式类似于同步,所有响应都需要时间。我们可以像@Gilad Bison 代码那样以异步方式识别特定请求的响应吗?
    • 如上所述 - 您可以使用 each 而不是 eachSeries。我编辑了答案
    猜你喜欢
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2019-01-28
    相关资源
    最近更新 更多