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

标签 javascript node.js asynchronous

我尝试使用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/

相关文章:

node.js - 在expressjs中检测IE,但无法获取静态文件

javascript - 脚本。 JADE 标签未在 Express 中呈现

node.js - Nodejs + Express - 无法调用未定义的方法 'json'

javascript - 链接到模板的 polymer 非阻塞异步函数

javascript - 浏览器是否支持 stopImmediatePropagation?

javascript - jquery 旋转图像并用同名文件保存它们(覆盖)?

Javascript 使用哈希值重新加载页面

javascript - AngularJs - 类型错误 : Cannot set property 'showGreeting' of null

asynchronous - 错误(10818): Can't infer register because it does not hold its value outside the clock edge

c# - 集合初始值设定项的异步填充