2016-04-03 71 views
0

我正在對後端服務器進行兩個API調用,並且正在使用以下方法向用戶顯示json中的兩個響應。但是,警報2根據控制檯是'未定義';警報1起作用。我究竟做錯了什麼?顯示多個API調用的結果

app.get("/blah", function (req, res) { 

    var alert = 'api call for alert' 
    var alert2 = 'api call for alert 2' 


    request(alert, alert2, function (error, response, alert, alert2) { 

     console.log(alert); 
     console.log(alert2); 

     res.json({ 
      Alert: alert, 
      Alert2: alert2 
     }); 
    }); 
}); 

回答

1

這是因爲請求不允許以這種方式從一次調用異步進行多個請求。

您可以異步實現這一點的一種方法是使用async.parallel從異步模塊。

但是,爲了簡單起見,我只是要提供一個不需要異步模塊的示例,而是將以串行方式工作。

這不是執行此操作的最有效的方式,因爲在您的示例中,第二個請求不需要首先完成第一個請求。

app.get("/blah", function (req, res) { 

    var alert = 'api call for alert' 
    var alert2 = 'api call for alert 2' 

    request(alert, function (error, response, alert) { 

     console.log(alert); 

     request(alert2, function (error, response, alert2) { 
      console.log(alert2); 

      res.json({ 
       Alert: alert, 
       Alert2: alert2 
      }); 
     }); 
    }); 
}); 

異步例如(https://github.com/caolan/async):

app.get("/blah", function (req, res) { 

    var alert = 'api call for alert' 
    var alert2 = 'api call for alert 2' 

    async.parallel([ 
     function(callback) { 
      request(alert, function (error, response, alert) { 
       if(error) { 
        callback(error); 
       } else { 
        callback(null, alert); 
       } 
      }); 
     }, 

     function(callback) { 
      request(alert2, function (error, response, alert2) { 
       if(error) { 
        callback(error); 
       } else { 
        callback(null, alert2); 
       } 
      }); 
     } 
    ], function(err, results) { 
     res.json({ 
      Alert: results[0], 
      Alert2: results[1] 
     }); 
    }); 
}); 
+0

謝謝你,但我想的Node.js是異步的? –

+0

它通常是,但在本例中,由於第二個請求位於第一個請求的回調中,這意味着第一個請求必須已經完成 - 因此它被阻塞並且不是異步的。 –

+0

我已經添加了一個異步示例 –