node.js - 异步/等待 - Typescript 和 ExpressJs

标签 node.js express typescript async-await

我正在体验 typescript 的 async/await in express。我有以下代码片段,它不会产生任何结果,它只是等待,就好像 promise 从未完成一样。任何让它发挥作用的想法。

  ..
  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 }) });
  }

最佳答案

看起来你的'this'在你这样传递之后就丢失了

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

如果您只是通过以下方式保留 this

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

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

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

关于node.js - 异步/等待 - Typescript 和 ExpressJs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36908239/

相关文章:

javascript - 使用 express.js 打开 HTML 文件

javascript - Angular Material sidenav 指令在 app.component 中不起作用

javascript - Select 在 TypeScript 中没有选项属性

javascript - npm:缺少 node_modules 中的传递依赖项

node.js - MongoDB-Express::ENOTDIR:不是目录,...gssapi.js/package.json

javascript - 路由和路由处理程序之间的函数未按预期执行

javascript - 无法从服务订阅数据到组件

javascript - 使变量对用户完全不可见,直到他做了特定的事情

javascript - 在 Node/Express 中使用 Request.js 和 Cheerio.js 返回空数组

arrays - 超测多个request.field数组在服务器上未定义