Javascript 处理3个微服务争用条件的正确方法。(答应我,全部?)
我有多确定这个承诺。所有人都会一个接一个地执行承诺请求 场景I有3个服务<代码>前端,Javascript 处理3个微服务争用条件的正确方法。(答应我,全部?),javascript,node.js,promise,microservices,race-condition,Javascript,Node.js,Promise,Microservices,Race Condition,我有多确定这个承诺。所有人都会一个接一个地执行承诺请求 场景I有3个服务前端,上传程序,和api frontend是客户端,uploader处理与谷歌存储相关的操作,api处理正常的REST内容 在我的数据库中,我有如下内容: { id: 1, directory: 'googlestorage/dir/randomstring.jpg', user_id: 100 } 现在在我的前端,我有一个函数,它触发对目录的更新并删除旧目录,因此最终结果应该是 { id: 1, di
上传程序
,和api
frontend
是客户端,uploader
处理与谷歌存储相关的操作,api
处理正常的REST内容
在我的数据库中,我有如下内容:
{
id: 1,
directory: 'googlestorage/dir/randomstring.jpg',
user_id: 100
}
现在在我的前端,我有一个函数,它触发对目录的更新并删除旧目录,因此最终结果应该是
{
id: 1,
directory: 'googlestorage/new_directory/anotherRandomString.jpg',
user_id: 100
}
在我的frontend
中,我需要确保在通过调用fileuploader
删除记录之前,首先调用api
更新数据库中的记录
但是在我的fileuploader
上,我传递目录
,检查并验证是否允许用户删除该文件
但是如果我首先更新数据库,那么我将无法检查记录是否仍在用户的记录上,因为数据已经更新,并且与旧记录不匹配
我也不想先删除文件,因为如果更新数据库的请求失败怎么办
我试着做:
await Promise.all([requestUpdateToApi, requestToDeleteFileUploader]);
但这是一样的,一个会先被更新或者先被删除
我想这样做,如果一个请求失败,另一个也不应该继续-有没有一个不涉及数据库结构的好解决方案?实际上,我可以编辑目录,这样每个文件都存储在
randomDirectoryName/{userId}/{filename}
中
因此,如果我删除该文件,我只需使用
id
和user\u id
来验证数据,然后删除/{userId}/{directoryFromRequest}
下的路径,而不必担心竞争条件 doFirstRequest()。然后(result=>doSecondRequest())
也这样做了,但如果我先执行firstRequest
,它将更新数据库中的记录,我将无法在第二次请求时再查询该记录