日安。
我在一个快速项目上工作,也没有完全理解异步是如何工作的。这是我的项目结构
-controllers --userController.js -services --paymentService.js
支付服务是第三方支付工具的实现,它定义了一个使用如下方法的im。
const pay = async(data) => {
    service.pay()
        .then(function(response){
            return response;
        }).catch(function(err)){
             console.log(err);
        });
} 我从我的userController调用这个方法
let payUser = async(req, res) => {
    const response = await paymentService.pay(req.data);
    if(response) {
        res.send(response)
    }
}但是响应总是不确定的,它不会像我想的那样等待,因为“等待”关键字。
这到底是怎么回事?如果我想让它等到响应返回时,我做错了什么?
发布于 2021-09-20 22:50:16
pay函数的代码中存在一个问题:
const pay = async(data) => {
    service.pay()
        .then(function(response){
            return response;
        }).catch(function(err)){
             console.log(err);
        });
} 你什么都不回。你只需运行service.pay()。因此,函数pay的签名(在第一行中声明)是一个返回承诺的函数,但返回类型是Promise<void>,而不是Promise<YourData>。这使得它始终返回undefined,即使在使用await调用时也是如此,就像在完整的示例代码中一样。
我注意到在“然后”回调中有代码return response;。这可能意味着您打算在数据准备好时将该数据返回给pay的调用方(而不是service.pay)。要做到这一点,应该通过以下两种方式之一重写pay函数:
pay.
service.pay ...替换为return service.pay ...,这样service.pay返回的承诺实际上会返回给
service.pay ...替换为return await service.pay ...。您已经将pay设计为一个异步函数,因此您现在可以在其中使用await,这通常会使这种代码在以后更容易编写和读取。https://stackoverflow.com/questions/69261438
复制相似问题