#node.js #asynchronous #waterfall
#node.js #асинхронный #водопад
Вопрос:
Я понимаю это:
Ошибка: 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:
Когда вы используете 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 неявного обратного вызова, а возвращаемое значение будет использоваться в качестве результирующего значения. (т. е. отклоненное возвращенное обещание становится аргументом обратного вызова err, а разрешенное значение становится результатом.)