在nodejs中的请求中请求

时间:2017-09-14 02:25:39

标签: node.js request

我在nodejs中使用请求库。我需要在请求中调用新的url但我无法加入响应,因为它是asynchronouse。如何在请求中包含请求结果的下方请求中发送变量

 request({
    url: url,
    json: true
}, function (error, response, body) {
    var a = [];
    a.push(response);
    for (i = 0; i < a.length; i++) {
        if (a.somecondition === "rightcondition") {
            request({
                url: url2,
                json: true
            }, function (error, response, body) {
                a.push(response);
            });
        }
    }
    res.send(a);
});

2 个答案:

答案 0 :(得分:1)

您的代码似乎几乎适合您想要的内容。您只是在错误的回调中发送响应。移动它,使其仅在第二个请求完成后发送:

request({
    url: url,
    json: true
}, function (error, response, body) {
    var a = [];
    a.push(response);
    request({
        url: url2,
        json: true
    }, function (error, response, body) {
        for(i=0;i<a.length;i++){
            if(a.somecondition === "rightcondition"){
                a.push(response);
            }
        }
        res.send(a); // this will send after the last request
    });
});

答案 1 :(得分:0)

您可以使用async waterfall

'use strict';

let async = require('async');
let request = require('request');

async.waterfall([function(callback) {
    request({
        url: url,
        json: true
    }, function(error, response, body) {
        callback(error, [response]);
    });
}, function(previousResponse, callback) {
    request({
        url: url2,
        json: true
    }, function(error, response, body) {
        for(i=0;i<previousResponse.length;i++){
          if(previousResponse.somecondition === "rightcondition"){
            previousResponse.push(response);
         }
        }
        callback(error, previousResponse);
    });
}], function(err, results) {
    if (err) {
        return res.send('Request failed');
    }
    // the results array will be final previousResponse
    console.log(results);
    res.send(results);
});