Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 处理3个微服务争用条件的正确方法。(答应我,全部?)_Javascript_Node.js_Promise_Microservices_Race Condition - Fatal编程技术网

Javascript 处理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

我有多确定这个承诺。所有人都会一个接一个地执行承诺请求

场景I有3个服务<代码>前端,
上传程序
,和
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
,它将更新数据库中的记录,我将无法在第二次请求时再查询该记录