首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >等待不像预期的那样在nodejs项目上工作

等待不像预期的那样在nodejs项目上工作
EN

Stack Overflow用户
提问于 2021-09-20 22:20:48
回答 1查看 66关注 0票数 0

日安。

我在一个快速项目上工作,也没有完全理解异步是如何工作的。这是我的项目结构

-controllers --userController.js -services --paymentService.js

支付服务是第三方支付工具的实现,它定义了一个使用如下方法的im。

代码语言:javascript
运行
复制
const pay = async(data) => {
    service.pay()
        .then(function(response){
            return response;
        }).catch(function(err)){
             console.log(err);
        });
} 

我从我的userController调用这个方法

代码语言:javascript
运行
复制
let payUser = async(req, res) => {

    const response = await paymentService.pay(req.data);
    if(response) {
        res.send(response)
    }
}

但是响应总是不确定的,它不会像我想的那样等待,因为“等待”关键字。

这到底是怎么回事?如果我想让它等到响应返回时,我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-20 22:50:16

pay函数的代码中存在一个问题:

代码语言:javascript
运行
复制
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.

  • Rewrite

  • service.pay ...替换为return service.pay ...,这样service.pay返回的承诺实际上会返回给

  • 的调用方,因此您可以删除“然后”回调,并将service.pay ...替换为return await service.pay ...。您已经将pay设计为一个异步函数,因此您现在可以在其中使用await,这通常会使这种代码在以后更容易编写和读取。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69261438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档