這是因爲請求不允許以這種方式從一次調用異步進行多個請求。
您可以異步實現這一點的一種方法是使用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]
});
});
});
謝謝你,但我想的Node.js是異步的? –
它通常是,但在本例中,由於第二個請求位於第一個請求的回調中,這意味着第一個請求必須已經完成 - 因此它被阻塞並且不是異步的。 –
我已經添加了一個異步示例 –