【发布时间】:2023-04-04 05:07:01
【问题描述】:
我正在尝试使用 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 没有阻止我的代码吗?
【问题讨论】:
-
它正在阻塞代码,但是异步请求是非阻塞...它
forEachs 在数组上并且对于每个元素,发送一个异步请求。在请求完成之前执行最后一个日志。 -
@AndrewLi 将其作为未来参考的答案
-
这种一般类型的问题(对 nodejs 中异步调用如何工作的误解)在这里每天被问多次。这里有数百个相关的问题/答案。
-
这个展示了如何判断多个异步调用何时完成(这就是这里真正发生的事情):Tracking when multiple async calls are done
标签: javascript arrays node.js foreach cheerio