Javascript 使用异步瀑布时,模型的响应未定义
我正在尝试将数据返回到视图模板。我正在使用async.瀑布来实现这一点。只有一个问题,该类的结果总是Javascript 使用异步瀑布时,模型的响应未定义,javascript,node.js,Javascript,Node.js,我正在尝试将数据返回到视图模板。我正在使用async.瀑布来实现这一点。只有一个问题,该类的结果总是undefined 控制器: Profile().then(response => { console.log(response); }); 型号: module.exports = async function Profile() { let waterfall = await Async.waterfall([ function(callback) {
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;
}
让瀑布
始终是未定义的
,因此来自概要文件的响应也未定义。为什么它不起作用?如何修复它?您可以将异步瀑布
包装成一个承诺
瀑布的回调只会拒绝/解决承诺。然后,所创建的承诺将根据瀑布的结果进行解析,或者在发生错误时被拒绝
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
};
}
你是说这个吗?如果是,则此函数返回未定义的
,因为它是这样定义的wait
不会神奇地将基于回调的函数转换为返回承诺的函数。@t.niese好的,谢谢您的解释。你对我如何修理它有什么建议吗?