Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js async.series和现有函数_Node.js - Fatal编程技术网

Node.js async.series和现有函数

Node.js async.series和现有函数,node.js,Node.js,我正在努力解决以下问题。假设我有一个wait函数,它将回调函数(这里是foo)作为参数: function foo(data){ console.log('foo says: ' + data); } function wait(count,callback) { console.log("waiting " + count + "s ..."); setTimeout(function(){ callback("just waited " + count +

我正在努力解决以下问题。假设我有一个wait函数,它将回调函数(这里是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)返回:

现在我想使用async.series,首先等待7秒,然后等待3秒(即总共10秒)。可能是这样的:

async.series([wait(7,foo),wait(3,foo)], function(err,result){ console.log(result); });
但是,为了使类似的功能正常工作,我必须修改我的wait函数,以便调用回调函数(null,“just waited”+count+“s”)(而不是回调函数(“just waited”+count+“s”),并且我还必须修改foo函数(从foo(数据)到foo(null,数据))。或者有没有一种方法可以在不修改现有函数的情况下使用async

不是:如果我尝试
async.series([wait(7,foo),wait(3,foo)],函数(err,result){console.log(result);};
我得到以下错误:

node_modules/async/dist/async.js:3671
            task(rest(function (err, args) {
            ^

TypeError: task is not a function

感谢您提供的帮助。

我真的认为使用异步模块来处理这个问题是个坏主意。几年前,它曾经是一个不错的解决方案,但现在最新的节点内置了异步/等待关键字,如果您真的不能使用最新的节点,那么添加babel Transfilation就不难了

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

我真的认为使用async模块来处理这个问题是个坏主意。几年前它曾经是一个不错的解决方案,但是async/await关键字现在内置在最新的节点中,如果你真的不能使用最新的节点,那么添加babel Transfilation就不难了

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

是的,您需要根据约定调用回调。是的,您需要根据约定调用回调。谢谢您的回答。我实际上是在使用wait作为示例函数。我遇到的问题是,如果我想使用async.series,需要更改函数的签名,并想知道其他人是否有遇到同样的问题,以及他们是如何克服的。不要使用async.series。现在它已经过时了,而且是不好的做法。使用async wait和Promissions进行操作,您就不需要更改签名。感谢您的回答。我实际上是使用wait作为示例函数。我遇到的问题实际上是需要更改函数的签名f我希望能够使用async.series,并想知道其他人是否也遇到过同样的问题,以及他们是如何克服的。不要使用async.series。现在它已经过时了,而且很糟糕。使用async Wait和Promissions进行操作,您将不需要更改签名。