我正在尝试将数据返回到我的视图模板。我正在使用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
中,然后瀑布的回调仅执行拒绝/解决承诺。然后,创建的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
};
}