2016-11-22 87 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); 
    }); 
} 
相關問題