node.js - 从 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');
在删除收集请求后执行。但正如你所见,这并没有发生。我真的不明白为什么。
知道为什么会这样吗?我的逻辑是否有缺陷?我怎样才能实现我的目标?
谢谢!
解决方案
async
-await
仅使用 Promise。你用Observable
s 试试它们。那是行不通的。Observable
s 有一个 API,可以让你将它们转换为Promise
s。您可以在它们上调用一个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
,让你的代码看起来是同步的。
推荐阅读
- typescript - 布尔比较生成 TS2365 错误
- python - 全局变量在赋值前给出局部变量引用
- python - 在计算子字符串的出现次数时计算与正则表达式和精确子字符串的不匹配?
- sql-server - SQL Server 2014 中复合主键的行数限制
- cassandra - 日期列,它是 Cassandra 中的文本类型。所以我需要一个 UDF 将该文本转换为时间戳,以便我可以查询该列
- c# - 在 Web 和 App 之间使用 FCM 推送通知
- excel - 选择所有包含数据的行和列,然后使用多个条件进行过滤
- javascript - 如何将 mongodb 数据库的内容显示到前端?
- java - 尝试运行设置活动时 Android 应用程序崩溃
- ruby - 从另一个文件中获取鞋子编辑框的文本字符串