【发布时间】:2021-11-14 13:49:02
【问题描述】:
美好的一天。
我正在从事一个快速项目,但无法完全理解异步功能是如何工作的。这是我的项目结构
-控制器 --userController.js -服务 --paymentService.js
支付服务是第三方支付工具的实现,它定义了一种我使用的方法
const pay = async(data) => {
service.pay()
.then(function(response){
return response;
}).catch(function(err)){
console.log(err);
});
}
我从我的用户控制器调用这个方法
let payUser = async(req, res) => {
const response = await paymentService.pay(req.data);
if(response) {
res.send(response)
}
}
但响应总是未定义的,它不会像我认为的那样等待,因为“await”关键字。
这究竟是如何工作的?如果我想让它等到响应返回,我做错了什么?
【问题讨论】:
-
你不会从你的
pay函数返回任何东西,所以await没有任何东西。 -
pay 函数本身可以使用 try/catch/finally 和 await 重写,因为您费心将其声明为异步......这可能会为您澄清事情,或者您可以只返回承诺链
-
但是当我在服务调用上定义“then()”函数时,它应该等待服务完成承诺,然后他返回响应,用户控制器等待直到发生这种情况,不应该工作像那样?
-
在 'service.pay' 之前添加一个 return 到目前为止 pay 函数什么都不返回(所以没有什么可以等待)
-
您应该编辑问题的标题以更准确地描述您的问题,这不是
await关键字在您的 Node.js 项目中无法按预期工作,而是异步函数你写的每次都返回undefined,即使你在等待它。
标签: javascript express asynchronous async-await