forループでnode.jsサーバーから( 'request'パッケージを使用して)複数のHTTPリクエストを送信しようとしています。Node.js - forループで複数のHTTP GETを送信するリクエストを使用しています
基本的な考え方は、URLの配列を持ち、それぞれにHTTP getを送信し、responseArrayという配列にレスポンスを格納することです。
これを試してみると「未定義」になりますが、forループ内のコンソールにログを記録するとリクエストが機能していることがわかります。
function apiCalls() {
var URLs = [‘URL1’, ‘URL2’, ‘URL3’];
var responseArray = []
for (var i = 0; i < URLs.length; i++) {
request({
url: URLs[i],
method: 'GET',
headers: {
'Connection': 'close'
},
}, function(error, response, body) {
if (error) {
console.log(error);
} else {
responseArray.push(String(response.body));
console.log(responseArray) // this is showing me all the data in the array correctly
return responseArray;
}
}) //end request function
} //end for loop
console.log(responseArray)
} //end apiCalls function
apiCalls()
だから、スタックオーバーフローとelsehwereにここではいくつかの異なるソリューションを見た後、私は約束を使用してみました。私はのためのループの後responseArrayを記録しようとしたとき、私は常に空の配列を取得
var apiCalls = new Promise(function(resolve, reject) {
var URLs = [‘URL1’, ‘URL2’, ‘URL3’];
var responseArray = [];
for (var i = 0; i < URLs.length; i++) {
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
request({
url: URLs[i],
method: 'GET',
headers: {
'Connection': 'close'
},
}, function(error, response, body) {
if (error) {
console.log(error);
} else {
resolve(responseArray.push(String(response.body))
}
}) //end request
} //end for loop
})
apiCalls.then(function(result) {
console.log('this is calling the promise')
console.log(result)
}, function(err) {
console.log(err)
});
:私は前にそれらを使用しないとgoogle example
の約束を、これをオフに基づいて、決してました。代わりに - 私は「未定義」を取得私はそうのような変数に返された配列を割り当てようとします
var gimmeAllResponses = apiCalls();
console.log(gimmeAllResponses); //returns 'undefined'
誰も私が間違っているつもりですどこ私を見ることができますか? forループが終了した後、どのように 'responseArray'データを更新するのですか?
あなたは 'undefined'をどこで取得していますか?コンソールで? 'console.log(error)'ステートメントですか? – amn