Это потому, что запрос не позволяет асинхронно выполнять несколько запросов с одного вызова таким образом.
Один из способов, которым вы могли бы достичь этого асинхронно, - использовать 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 является асинхронным? –
Обычно это, но в этом примере, когда второй запрос находится внутри обратного вызова первого запроса, это означает, что первый запрос должен быть завершен - следовательно, он заблокирован и не является асинхронным. –
Я добавил асинхронный пример –