Я использую асинхронный водопад, почему обратный вызов не является функцией? - PullRequest
1 голос
/ 30 марта 2019

Я получаю это:

Ошибка: 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);
});

почему это может бытьошибка?хотя callback является функцией по умолчанию async.waterfall.разве это невозможно в асинхронной функции? Я помещаю в нее асинхронную функцию?

1 Ответ

0 голосов
/ 30 марта 2019

Когда вы используете 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);
});

Из документов :

Везде, где мы принимаем асинхронную функцию в стиле узла,мы также напрямую принимаем асинхронную функцию ES2017.В этом случае асинхронной функции не будет передан окончательный аргумент обратного вызова , и любая брошенная ошибка будет использоваться в качестве аргумента err неявного обратного вызова, а возвращаемое значение будет использоваться в качестве значения результата.(то есть отклонение возвращенного Promise становится аргументом обратного вызова err, а разрешенное значение становится результатом.)

...