Async/Await - Typescript 和 ExpressJs

Posted

技术标签:

【中文标题】Async/Await - Typescript 和 ExpressJs【英文标题】:Async/Await - Typescript and ExpressJs 【发布时间】:2016-08-22 20:07:07 【问题描述】:

我正在体验 typescript 的 async/await in express。我有以下代码 sn-p 不会产生任何结果,它只是等待,就好像承诺永远不会完成一样。任何想法如何使它工作。

  ..
  router.get('/test', this.test);
  ..

  private async test(req: Request, res: Response) 
    const result = await this.test2();
    res.json(result);
  

  private async test2() 
    return await this.test3();
  

  private test3() 
    return new Promise((resolve) =>  resolve( "working": true ) );
  

更新:

如果我用下面的行更改第一行,它会起作用。任何想法为什么?

router.get('/test', (req,res)=>this.test(req,res));

update2(已修复) - 基于下面的 @smnbbrv 答案

 private test = async(req: Request, res: Response)=> 
    const result = await this.test2();
    res.json(result);
  

  private test2 = async ()=> 
    return await this.test3();
  

  private test3 = async()=> 
    return new Promise((resolve) =>  resolve( "working": true ) );
  

【问题讨论】:

您的代码看起来不错。我尝试运行给定的 sn-p(已删除 res.json(result);)并成功等待并解决了对 test 函数的调用。你的问题一定出在其他地方。 【参考方案1】:

看起来你的“这个”在你这样传递后丢失了

router.get('/test', this.test);

如果您只是将this 值保留为

router.get('/test', this.test.bind(this));

这应该完全按照你在更新中提到的方式工作

router.get('/test', (req,res)=>this.test(req,res));

【讨论】:

以上是关于Async/Await - Typescript 和 ExpressJs的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Typescript 认为 async/await 返回包装在承诺中的值?

实现一个 async/await (typescript 版)

typescript 使用async / await测试NgRx Facade。

Typescript async/await 无法确定正确的返回类型

Typescript async/await 和 angular $q 服务

使用 Typescript+VSCode 调试 Node.js Async/Await