nodejs async error typeof arr.length ===“number”

时间:2015-12-13 02:37:39

标签: node.js asynchronous

我正在尝试使用async.series来同时运行三个函数。

我使用的精简代码如下:

var async = require('async');


function round(rnum, rlength) {
    return newnumber = Math.round(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
}

function roundup(rnum, rlength) {
    return newnumber = Math.ceil(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
}

function rounddown(rnum, rlength) {
    return newnumber = Math.floor(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
}

function fun_auth_pwdLogin(_html) {
    //do something
}

var login = function () {
    //do something        
}
exports.login = login;



function RunScrapingPositions(callbackDone) {
    status = false;
    myhttp.get('https://example.com/PB.jsp',
            function (_html) {
            if (_html && _html.length > 10) {
            //do something                   
            } else {
                callbackDone();
                }
    })  
}



function RunScrapingOrderBook(callbackDone) {
    status = false;
    myhttp.get('https://example.com/OB.jsp',
            function (_html) {
            if (_html && _html.length > 10) {
            //do something
            } else {
                callbackDone();
                }   
    }); 
}



function RunScrapingMarketWatch(callbackDone) {
    myhttp.get('https://example.com/MW.jsp',
            function (_html) {
            if (_html && _html.length > 10) {
            //do something
            } else {
                callbackDone();
                }
    }); 
}



async.series([
    RunScrapingPositions,
    RunScrapingOrderBook,
    RunScrapingMarketWatch
    ],function () {
        console.log('Executed scraping in series');
        }
);

当我运行此代码时,出现以下错误:

/home/ubuntu/node_modules/async/lib/async.js:74
            typeof arr.length === "number" &&
                      ^
TypeError: Cannot read property 'length' of undefined
    at _isArrayLike (/home/ubuntu/node_modules/async/lib/async.js:74:23)
    at _parallel (/home/ubuntu/node_modules/async/lib/async.js:710:23)
    at async.series [as _onTimeout] (/home/ubuntu/node_modules/async/lib/async.js:734:9)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

我做错了什么?如果此错误与回调内容有关,请告诉我,以便我也可以在代码中添加这些功能的内容。

我还观察到在错误发生之前,第一个和第三个函数被调用,但不知何故第二个函数RunScrapingOrderBook没有运行 - 如果上面的错误得到解决,不确定是否会解决这个问题。

现在无能为力: - )

1 个答案:

答案 0 :(得分:0)

我没有查看异步源,但我会默认传递async文档建议的值,https://github.com/caolan/async#seriestasks-callback

如果我正确读取它,你的任务回调需要一个错误作为第一个参数,(我认为短路执行,如果其中一个任务返回错误):

function RunScrapingMarketWatch(callbackDone) {
    myhttp.get('https://example.com/MW.jsp',
            function (_html) {
            if (_html && _html.length > 10) {
            //do something
            } else {
                var err = null;
                callbackDone(err);
                }
    }); 
}

我认为它不会导致您看到的错误,但系列完整回调接受,错误和结果数组:

function(err, results) {
    // results is now equal to: {one: 1, two: 2}
});