Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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 节点异步竞争条件_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 节点异步竞争条件

Javascript 节点异步竞争条件,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我在节点中有一个路由: 接受用户ID 从redis获取用户 更新用户的属性 将用户保存回redis 由于redis使用异步方法获取和保存,如果同一用户收到另一个请求,我会得到过时的结果 确保第二个请求在第一个请求完成之前不进行处理的最佳模式是什么?使用同步版本的get和set似乎是错误的,因为它是锁定的,尽管我认为它在我的应用程序中不会有任何明显的效果。Np不知道最好的方法是什么,但是如果您只有一个节点脚本实例在运行,基本数组就可以很好地完成这项工作。仅当用户名不在CurrentlyUpdate

我在节点中有一个路由:

  • 接受用户ID
  • 从redis获取用户
  • 更新用户的属性
  • 将用户保存回redis
  • 由于redis使用异步方法获取和保存,如果同一用户收到另一个请求,我会得到过时的结果


    确保第二个请求在第一个请求完成之前不进行处理的最佳模式是什么?使用同步版本的get和set似乎是错误的,因为它是锁定的,尽管我认为它在我的应用程序中不会有任何明显的效果。

    Np不知道最好的方法是什么,但是如果您只有一个节点脚本实例在运行,基本数组就可以很好地完成这项工作。仅当用户名不在CurrentlyUpdate数组中时更新。只需使用布尔值检查更新是否有效。但如果发生这种情况时有很多地方,更好的方法可能是使用队列。类似->的内容可能会有帮助,当然,请确保将并发设置为1,以避免您提到的问题。谢谢,我不能只检查布尔值,因为我需要将请求排队,而不仅仅是取消它们。你给我指出了正确的方向,我最终使用了它,它似乎做得很好。