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 无法确定正确的返回类型