Я пытаюсь вернуть данные в свой шаблон просмотра. Я использую async.waterfall для этого. Есть только одна проблема, результат из класса всегда undefined
контроллер:
Profile().then(response => {
console.log(response);
});
модель:
module.exports = async function Profile() {
let waterfall = await Async.waterfall([
function(callback) {
db.getOneWhere('users', 'username', global.req.params.username, ["username"]).then(result => {
callback(null, result);
});
},
function(arg1, callback) {
db.getOneWhere('users', 'username', 'admin', ["username"]).then(result2 => {
let ok = {
arg1,
result2
}
callback(null, ok);
});
}
], function (err, result) {
let tmp = [];
Object.keys(result).forEach(function(k) {
tmp = [...tmp, ...result[k]];
});
return {'data': tmp};
});
return waterfall;
}
let waterfall
всегда undefined
поэтому ответ от Profile.then()...
также не определен. Почему он не работает и как он может быть исправлен?
Вы бы Async.waterfall
в Promise
обратный вызов водопада тогда будет только отклонять/разрешать обещание. Созданное обещание затем разрешится с результатом водопада или будет отклонено, если произошла ошибка.
module.exports = async function Profile() {
let result = await new Promise((resolve, reject) => {
Async.waterfall([ /*....*/ ], (err, result) => {
if (err) {
reject(err)
} else {
resolve(result)
}
})
})
let tmp = [];
Object.keys(result).forEach(function(k) {
tmp = [...tmp, ...result[k]];
});
return {
'data': tmp
};
}
undefined
поскольку она определена таким образом.await
волшебным образом не преобразует основанную на обратном вызове функцию в функцию, которая возвращает обещание.