gpt4 book ai didi

javascript - .each 和回调

转载 作者:搜寻专家 更新时间:2023-10-31 22:56:26 25 4
gpt4 key购买 nike

我正在使用请求和 cheerio Node 模块来创建从网站获取一些数据。我想获得一个项目列表,一旦这个列表完成,调用一个异步函数:

request('http://myurl', function(req,res,data){
var $ = cheerio.load(data);
var List = [];

$('.myItems').each(function(i, element){
console.log( typeof $(this).text() )
List.push($(this).text());
});

for (var i=0; i < List.length; i++){
// make an asynchronous call to a API
}
});

我的问题是如何等待列表完成,也就是说,我怎么知道 .each 函数已经遍历了所有项目?

我可以用异步来做到这一点吗?

谢谢

最佳答案

cheerio 的.each 函数是同步的(参见source)。因此,只要您在回调中不执行任何异步操作(问题中就是这种情况),您就无事可做:在下一行中,循环将完成。


如果您确实在循环中调用异步函数,最干净、最简单的解决方案是使用 Promise 库。

按顺序(以 Bluebird 为例):

var p = Promise.resolve();
$('.myItems').each(function(i, element){
p = p.then(function(){
// do something with $(this).text() and return a promise
});
});
p.then(function(){
// all asynchronous tasks are finished
});

如果不需要顺序请求(这里是 Q 的例子):

Q.allSettled($('.myItems').map(function(){
// return a promise
})).then(function(){
// all asynchronous tasks are finished
});

关于javascript - .each 和回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23608325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com