2017-09-14 1 views
0

nodejs에서 요청 라이브러리를 사용 중입니다. 요청 내에서 새 URL을 호출해야하지만 비동기 적이므로 응답에 참여할 수 없습니다. 요청 내의 요청 결과를 포함하여 아래의 요청과 마찬가지로 변수를으로 보내려면 어떻게해야합니까?요청 내에서 nodejs 요청

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); 
}); 
+0

두 번째 a.push 아래로 res.send를 이동하십시오. 그게 네가 필요한거야? – spiritwalker

+0

@spiritwalker 두 번째 요청에 조건이 있습니다. 편집 된 – kinkajou

+0

은 조건이 있는지 여부와 상관없이 두 번째 콜백 외부에서 res.send가 트리거되지 않도록해야합니다. 그러므로 res.send를 for 루프 옆에있는 – spiritwalker

답변

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 
    }); 
}); 
+0

실제로 요청은 for 루프 내에 있습니다. 내 잘못이야 ! – kinkajou

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); 
}); 
+0

나는 질문을 편집했습니다. – kinkajou