如何在async nodejs中完成所有流程并打印出消息

How to finish all the process and print out the message in async nodejs?

本文关键字:打印 消息 async nodejs      更新时间:2023-09-26

我试图用nodejsasync.echSeries运行大量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');
});

function(uri, next)使用一个url完成时,next()告诉async,如果您在请求的回调之外调用它,则不需要等待请求完成。

另一个副作用是,在您的代码中,迭代并不像调用eachSeries()时那样串行完成,多个请求同时运行。如果你有数百个url要请求,你将被禁止进入你正在查询的服务器。

看起来next()调用需要在carlistrequest回调内,而不是在旁边

我猜carlistrequest是异步的(假设它需要回调)。。。所以你启动异步请求,然后立即告诉async.eachSeries这个迭代已经完成(但它还没有完成——它还有工作要做。)