【问题标题】:Using async-await to execute a task AFTER dropping a collection from mongodb database使用 async-await 在从 mongodb 数据库中删除集合后执行任务
【发布时间】:2019-11-11 02:05:37
【问题描述】:

我正在尝试使用 async await 在执行其他代码之前执行 http 请求。
更准确地说,我想在我的 mongodb 数据库中删除一个集合,然后再执行其他一些任务。这是我所做的:

app.component.ts:

  async deleteRiskRatingData2() {
      await this.saveInformationService
      .deleteRiskRatingInformation()
      .subscribe((data: string) => {
        console.log('Deleting risk Rating');
        console.log(this.riskRatingTable);
      });
      console.log('TASKS TO BE EXECUTED AFTER DROPIING COLLECTION');
  }

保存信息.service.ts

  deleteRiskRatingInformation() {
    console.log('INIDE deleteRiskRatingInformation INSIDE SAVE-INFORMATION.SERVICE');
    return this.http.get(`${this.uri}/dropRiskRatingCollection`);
  }

在后台:

server.js

router.route('/dropRiskRatingCollection').get((req, res) => {
    RiskRating.remove({},(err) => {
        if (err)
            console.log(err);
        else
            res.json("Risk Rating Collection has been dropped!");
    });
});

这就是发生的事情:

虽然我的 Async/Await 实现应该允许我执行:

  console.log('TASKS TO BE EXECUTED AFTER DROPPING COLLECTION');

在删除收集请求后执行。但正如你所见,这并没有发生。我真的不明白为什么。
知道为什么会这样吗?我的逻辑是否有缺陷?我怎样才能实现我的目标?
谢谢!

【问题讨论】:

    标签: node.js angular mongodb express async-await


    【解决方案1】:

    async-await 仅适用于 Promise。你用Observables 试试。那是行不通的。 Observables 有一个 API,可以让您将它们转换为 Promises。您可以在它们上调用toPromise 方法来执行此操作。

    试试这个:

    async deleteRiskRatingData2() {
      const data = await this.saveInformationService.deleteRiskRatingInformation().toPromise();
      console.log('Deleting risk Rating');
      console.log(this.riskRatingTable);
      console.log('TASKS TO BE EXECUTED AFTER DROPIING COLLECTION');
    }
    

    注意:如果您只是为了测试而尝试它,那很好。但我认为你不应该真的切换回承诺只是使用async-await,让你的代码看起来同步。

    【讨论】:

    • 为什么'但我认为你不应该真的切换回承诺只是为了使用 async-await 来让你的代码看起来是同步的。'?
    • 嗯,有些任务最好让异步运行。此外,通过将 Observables 转换为 Promise,您将失去所有最终可以应用于 Observables 的强大运算符。
    • 好的,但是如果我想显示响应对象数据怎么办。用 toPromise 可行吗?
    • 是的。我们已经将响应分配给了我们在方法中声明的名为 dataconst
    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多