我正在尝试使用request
从网页获取一些信息以获取页面,然后cheerio
将DOM遍历到我需要的特定部分我正在重复此过程使用此代码使用array.forEach
的数组中的元素:
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
但是我得到了这个内容:
done
1.31 AUD
1.28 CAD
你能告诉我为什么array.forEach
没有阻止我的代码?
答案 0 :(得分:2)
您在向谷歌返回的任何http请求之前打印“已完成”。
你循环使用这些货币,为每个货币调用谷歌,然后打印'完成'。然后调用开始返回(按随机顺序,顺便说一句),然后打印结果。
因此,forEach不是异步的,但http请求是。