我使用异步瀑布,为什么回调不是函数?

时间:2019-03-30 14:29:27

标签: node.js asynchronous waterfall

我明白了:

  

错误:TypeError:回调不是函数

代码:

var async = require('async');

async.waterfall([
  (callback) => {
    callback(null, 'test');
  },
  async (value1, callback) => {
    const data = await send("http://google.com/search?q="+value1);

    callback(null, data); //TypeError: cb is not a function
  }
], (err) => {
  if (err) throw new Error(err);
});

为什么会出错?即使“回调”是async.waterfall的默认功能。我将异步功能放入异步功能中,这是不可能的吗?

1 个答案:

答案 0 :(得分:0)

在瀑布内部的函数中使用async时,没有callback参数。您无需解决callback(null, data)就能解决data

async.waterfall([
  (callback) => {
    callback(null, 'test');
  },
  async value1 => {
    const data = await send("http://google.com");

    return data;
  },
  (value1, callback) => {
     // value1 is the resolve data from the async function
  }
], (err) => {
  if (err) throw new Error(err);
});

来自docs

  

无论我们接受Node样式的异步功能,我们都直接   接受ES2017异步功能。在这种情况下,异步功能将   不会传递最终的回调参数,并且将抛出任何错误   用作隐式回调的err参数,并返回   值将用作结果值。 (即拒绝   返回的Promise成为err回调参数,并且已解决   值成为结果。)