2016-11-22 33 views
0

我有一个Node js程序,但是我很努力去理解如何在一个变量中加入响应细节。将两个不同url请求的结果加在一起

让我解释一下我的意思是:

  1. 我有不同的URL,我在同一时间(它需要在同一时间)做所有他们的request.GET中。

  2. 我得到的反应是不同的,这取决于URL结束 - 的反应可以是一个Dog-ListCat-List

  3. 然后我需要从Dog-list获取信息,所以我有一个if语句说如果回复中包含Dog-List,则打印出“在狗列表中”并运行所需的代码。

  4. 如果是Cat-List,则打印出'in cat list'并运行所需的代码。

  5. 最后,获取狗和猫的信息,并将它们结合在一起形成一个变量。

这是代码:

var urls = ['http://111.1:1111/cats', 'http://111.1:1111/dogs']; 

function test() { 
    async.map(urls, function(url, cb) { 
     request.get(url, function(error, response, body) { 
      if (error) { 
       console.log(error); 
      } else { 
       parseString(body, function(result) { 

        var age1 = 0; 
        var age2 = 0; 

        if (result.Return['Cat-List']) { 
         console.log('in cat list'); 
         age1 = result.Return['Cat-List'].age; 

        } else if (result.Return['Dog-List']) { 
         console.log('in dog list'); 
         age2 = result.Return['Dog-List'].age; 
        } 

        data = age1 + age2; 
        console.log(data); 
       }); 

      } 
     }); 
    }); 
} 

然而,正如你所期望的,因为我使用的是“如果”让每个URL响应后声明,我只会去任何进入狗或猫的名单,因此我的结果永远不能合并。

这是当我运行程序我得到打印的内容:

in cat list 
2 
in dog list 
3 

这是因为猫的年龄是2,和狗的年龄是5

这就是我想要的cmd看起来像:

in cat list 
in dog list 
5 

有没有不使用if语句做到这一点的不同方式?或者只是做一些其他的事情一起加入结果?我只是努力达到这个结果。任何帮助,将不胜感激!

+0

查看我的更新回答。 – rsp

回答

0

如果你想在任何地方使用的data值,那么你需要用它的东西,如运行的回调:

cb(null, data); 

null意味着没有错误。

还需要另一个回调作为参数传递给async.map当一切都喜欢的东西做致电:

function test() { 
    async.map(urls, function (url, cb) { 
     // code to run for every value 
    }, 
    function (err, results) { 
     // code to run after everything is finished 
     // here you can sum the results 
    }); 
} 

欲了解更多信息,请参阅:

全部示例 - 未测试:

var urls = ['http://111.1:1111/cats', 'http://111.1:1111/dogs']; 

function test() { 
    async.map(urls, function (url, cb) { 
     request.get(url, function(error, response, body) { 
      if (error) { 
       console.log(error); 
      } else { 
       parseString(body, function(result) { 
        var age = 0; 
        if (result.Return['Cat-List']) { 
         console.log('in cat list'); 
         age = result.Return['Cat-List'].age; 
        } else if (result.Return['Dog-List']) { 
         console.log('in dog list'); 
         age = result.Return['Dog-List'].age; 
        } 
        cb(null, age);  
       }); 

      } 
     }); 
    }, function (err, results) { 
     var sum = results.reduce((a, b) => a + b, 0); 
     console.log(sum); 
    }); 
} 
相关问题