gpt4 book ai didi

javascript - 如何在异步nodejs中完成所有过程并打印出消息?

转载 作者:行者123 更新时间:2023-12-03 08:11:50 25 4
gpt4 key购买 nike

我尝试使用nodejsasync.eachSeries运行大量的url。我想在流程完成后显示成功消息。但在我的代码中,成功消息只是在所有过程完成之前出现。请看一下我的代码:

    var request = require("request"),
cheerio = require("cheerio"),
mysql = require('mysql'),
async = require('async');

carlistrequest=request.defaults({
headers: {
'User-Agent':'request'
}
});
var callUrls =[
'http://www.carlist.my/used-cars/2625750/2006-mercedes-benz-s350-amg-w221-full-loan.html',
'http://www.carlist.my/used-cars/2625770/2010-toyota-estima-2-4-aeras-unregister-full-loan.html',
'http://www.carlist.my/used-cars/2625739/2012-honda-city-1-5-e-facelift-full-loan.html',
'http://www.carlist.my/used-cars/2536923/2002-bmw-318i-e46-2-0-cash-only-012-634-6341.html',
'http://www.carlist.my/used-cars/2625567/-loan-up-to-rm43k-2009-toyota-vios-1-5-j-spec-a-trd-bodykit-2015-final-clear-stock-hurry-up-.html'
];
async.eachSeries(callUrls, function(uri, next){
carlistrequest(uri, function(err, response, body){
var $ = cheerio.load(body);
var data={
name: $('#main-sidebar').find('.sub').text()
}
console.log(data);
})
next();
},function(callback){
console.log('All Url Done');
})

如何逐一运行url,并在所有url运行完成后,只显示成功消息。谢谢:)

最佳答案

移动next()在您的请求的回调中。

async.eachSeries(callUrls, function (uri, next) {
carlistrequest(uri, function (err, response, body) {
var $ = cheerio.load(body);
var data = {
name: $('#main-sidebar').find('.sub').text()
}
console.log(data);
next(); // <<<<<<<<<<<<
})
}, function (callback) {
console.log('All Url Done');
});

next()function(uri, next) 时告诉异步是通过一个 url 完成的,如果您在请求回调之外调用它,则无需等待请求完成。

另一个副作用是,在您的代码中,迭代并未像调用 eachSeries() 时那样按顺序完成。 ,多个请求同时运行。如果您有数百个网址需要请求,您将被禁止访问正在查询的服务器。

关于javascript - 如何在异步nodejs中完成所有过程并打印出消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34107573/

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