首页 > 解决方案 > 从 mongodb 数据库中删除集合后使用 async-await 执行任务

问题描述

我正在尝试在执行其他代码之前使用 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`);
  }

在后端:

服务器.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.jsangularmongodbexpressasync-await

解决方案


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,让你的代码看起来是同步的。


推荐阅读