我正在尝试使用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没有运行 - 如果上面的错误得到解决,不确定是否会解决这个问题。
现在无能为力: - )
答案 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}
});