【发布时间】:2020-02-10 18:08:22
【问题描述】:
我有多确定 promise.all 会一一运行 promise 请求?
场景我有 3 个服务。 frontend、uploader 和 api
frontend 是客户端,uploader 处理 google 存储相关的操作,api 处理正常的 REST 内容。
在我的数据库中,我有类似的东西:
{
id: 1,
directory: 'googlestorage/dir/randomstring.jpg',
user_id: 100
}
现在在我的前端,我有一个触发更新目录并删除旧目录的函数,因此最终结果应该是。
{
id: 1,
directory: 'googlestorage/new_directory/anotherRandomString.jpg',
user_id: 100
}
在我的frontend 中,我需要确保先调用api 来更新数据库中的记录,然后再调用fileuploader 删除它。
但是在我的fileuploader 上,我通过directory 来检查并验证是否允许用户删除文件。
但是如果我先更新数据库,那么我将无法检查记录是否仍在用户的记录中,因为数据已经更新并且与旧的不匹配。
我也不想先删除文件,因为如果更新数据库的请求失败怎么办?
我试过了:
await Promise.all([requestUpdateToApi, requestToDeleteFileUploader]);
但都是一样的,一个先更新,一个先删除。
我想这样做,所以如果一个请求失败,另一个请求也不应该继续 - 有没有一个很好的解决方案,而不涉及数据库结构?
【问题讨论】:
-
doFirstRequest().then(result => doSecondRequest())? -
也这样做了,但是如果我先执行
firstRequest,那么它将更新数据库中的记录,我将无法再在第二次请求时查询该记录
标签: javascript node.js promise microservices race-condition