Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.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 多个destroy()在backbone.js中锁定后端_Javascript_Sinatra_Datamapper_Backbone.js - Fatal编程技术网

Javascript 多个destroy()在backbone.js中锁定后端

Javascript 多个destroy()在backbone.js中锁定后端,javascript,sinatra,datamapper,backbone.js,Javascript,Sinatra,Datamapper,Backbone.js,在for backbone.js中,会发生以下情况: clearCompleted: function() { _.each(Todos.done(), function(todo){ todo.clear(); }); return false; }, 这将通过向支持应用程序的任何服务发送多个http DELETE请求来删除多个模型。在本例中,b/c没有问题,他们使用的是本地存储解决方案 但是,当我对后端数据库(sqlite/datamapper/sinatra)尝试类似的过程时,它

在for backbone.js中,会发生以下情况:

clearCompleted: function() {
  _.each(Todos.done(), function(todo){ todo.clear(); });
  return false;
},
这将通过向支持应用程序的任何服务发送多个http DELETE请求来删除多个模型。在本例中,b/c没有问题,他们使用的是本地存储解决方案

但是,当我对后端数据库(sqlite/datamapper/sinatra)尝试类似的过程时,它同时发送多个deletehttp请求这一事实会导致数据库锁定并发回一个错误

你们中有人遇到过这样的事情吗

我可以想出两种解决方法:

  • 使用destroyBatch()将id数组发送到DELETE调用中,并让sinatra嗅出多个id并在服务器端一次性处理所有删除

  • 在客户端有一个destroyAsync(),它将ID推到队列中,并在异步连锁反应中逐个调用模型上的destroy(),直到它们全部消失(但您会看到它们在屏幕上一个接一个地被删除,中间有一个停顿)

  • 这两种解决方案中有哪一种看起来合理,还是我是一只虚弱的、疯狂地拍打着翅膀的鹅


    -选项2是不可行的。用户可以单击“上一步”或关闭窗口,删除操作将不会完全成功。所以,就这样吧

    这使我们必须:

    • 修复DB:D中锁的初始问题
    • 一次发送要删除的所有ID
    我会先解决最初的问题。是什么导致他们锁起来的?我很确定,在开发模式下,sinatra一次只能处理一个请求,因此发送一系列删除实际上会在后端处理中序列化。。。这是另一个与返回的sqlite错误相关的问题


    至于批量发送删除。这是一个好主意,但它偏离了标准的RESTful控制器。所以你必须自己处理,因为你没有办法做到这一点。您可以在集合上添加deleteAll方法并从那里处理同步(如果您依赖事件,请不要忘记发送事件)。

    选项2不可行。用户可以单击“上一步”或关闭窗口,删除操作将不会完全成功。所以,就这样吧

    这使我们必须:

    • 修复DB:D中锁的初始问题
    • 一次发送要删除的所有ID
    我会先解决最初的问题。是什么导致他们锁起来的?我很确定,在开发模式下,sinatra一次只能处理一个请求,因此发送一系列删除实际上会在后端处理中序列化。。。这是另一个与返回的sqlite错误相关的问题


    至于批量发送删除。这是一个好主意,但它偏离了标准的RESTful控制器。所以你必须自己处理,因为你没有办法做到这一点。您可以在集合中添加deleteAll方法并从那里处理同步(如果您依赖事件,请不要忘记发送事件)。

    +1问题和图像:-)谢谢Sean!现在,如果我能找到人来回答我的问题,我将是一个快乐的露营者。问题和图片都是+1:-)谢谢肖恩!现在,如果我能找个人来回答我的问题,我将是一个快乐的露营者。是的。。选择2不好有几个原因。有臭味的同意。至于选项1:影响多种资源真的违反REST哲学吗?如果我想一次删除1000个项目,我真的想打1000个电话吗?就是这样做的?根据你的建议。我已经研究了修复我的初始问题,db锁定和一些有趣的事情。我在开发中使用sqlite实现了数据库锁定。。但当我部署到heroku时,他们的postgres db在多次删除时一点问题也并没有。这显然是一个纯粹的db问题,所以我们会去打猎。谢谢你把我推向正确的方向是的。。选择2不好有几个原因。有臭味的同意。至于选项1:影响多种资源真的违反REST哲学吗?如果我想一次删除1000个项目,我真的想打1000个电话吗?就是这样做的?根据你的建议。我已经研究了修复我的初始问题,db锁定和一些有趣的事情。我在开发中使用sqlite实现了数据库锁定。。但当我部署到heroku时,他们的postgres db在多次删除时一点问题也并没有。这显然是一个纯粹的db问题,所以我们会去打猎。谢谢你把我推向正确的方向。