-2
私は、ページを取得するためにrequest
を使用してWebページから情報を取得しようとしています。次に、cheerio
DOMを特定の部分に移動する必要があります。.forEach()が非同期で動作するのはなぜですか? - node.js
const cheerio = require('cheerio');
const request = require('request');
var i = 0;
var rates = [];
['AUD', 'CAD'].forEach(function(currancy){
var url = "https://www.google.com/finance/converter?a=1&from=USD&to=" + currancy
request(url , function(error, res , body){
const $ = cheerio.load(body);
var temp = $('.bld');
var rate = temp.text();
console.log(rate);
rates[i]= rate;
i++;
})
});
console.log('done');
私は期待していた結果がこのようなものです::
1.31 AUD
1.28 CAD
done
が、私は、これはinsted取得しています:array.forEach
このコードを使用して
done
1.31 AUD
1.28 CAD
array.forEach
が私のコードをブロックしない理由を教えてください。
*はコードをブロックしていますが、非同期要求*は非ブロックです* ... forEachは配列全体と各要素に対して非同期の要求を送信します。最後のログは、要求が完了する前に実行されます。 – Li357
@AndrewLiは、将来の参照のための答えにします – taha
この一般的なタイプの質問(ノードjでの非同期呼び出しの動作に関する誤解)は、ここで複数回質問されます。ここには何百もの関連する質問/回答があります。 – jfriend00