我正在努力解决以下问题。假设我有一个等待函数,它将回调函数(此处为foo)作为参数:
function foo(data){
console.log('foo says: ' + data);
}
function wait(count,callback) {
console.log("waiting " + count + "s ...");
setTimeout(function(){
callback("just waited " + count + "s");
},count*1000);
};
调用wait(5,foo)返回:
waiting 5s ...
foo says: just waited 5s
我现在想使用async.series,我首先等待7s然后3s(即总共10s)。它会是这样的:
async.series([wait(7,foo),wait(3,foo)], function(err,result){ console.log(result); });
但是对于这样的工作,我将不得不修改我的等待函数,以便调用回调(null,“等待”+ count +“s”)(而不是回调(“只是等待”+计数+ “s”)我还必须修改foo函数(从foo(data)到foo(null,data))。或者有没有办法在不修改现有函数的情况下使用async?
不是:如果我尝试async.series([wait(7,foo),wait(3,foo)], function(err,result){ console.log(result); });
我收到以下错误:
node_modules/async/dist/async.js:3671
task(rest(function (err, args) {
^
TypeError: task is not a function
感谢您提供的任何帮助。
答案 0 :(得分:0)
我真的认为使用异步模块处理这个问题是个坏主意。几年前它曾经是一个不错的解决方案,但async / await关键字现在内置在最新的Node中,如果真的不能使用最新的Node,那么就不难添加babel transpilation。
const delay = require('delay')
async function wait(seconds) {
console.log(`Waiting ${seconds} seconds`);
await delay(seconds);
}
async function test() {
await wait(7);
await wait(3);
}
test().catch(console.error);