具有现有函数

时间:2017-03-29 00:26:17

标签: node.js

我正在努力解决以下问题。假设我有一个等待函数,它将回调函数(此处为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

感谢您提供的任何帮助。

1 个答案:

答案 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);