使用API​​删除有时行得通,有时却行不通

时间:2019-03-21 15:45:49

标签: javascript angularjs lodash

我正在尝试通过API调用从文件夹中删除文件。 它似乎是随机工作的,有些文件被删除,有些则没有。

数据结构如下:

每个文件夹对象都有files属性。
files_to_delete中,我有要删除的文件和在文件夹数组中的文件夹索引。
在API调用中,我放置了整个文件夹对象
,我使用lodash删除功能删除了文件。

知道为什么它不起作用吗?

angular.forEach(files_to_delete, function(file_to_delete) {
  _.remove(folders[file_to_delete.index].files, function(file) {
   if (file === file_to_delete) {
         $http.put('/save_folders_file', folders[file_to_delete.index])       
     return (file === file_to_delete)
             });

1 个答案:

答案 0 :(得分:2)

您的示例尚不十分清楚,但是每次您找到要删除的文件时,似乎您都将文件保存在重复中。那看起来很混乱。它还假设Lodash在修改容器 时就像在修改循环一样,但是文档没有说明这样做,并且一个简单的(也许是幼稚的)测试表明它没有这样做:

var array = [1, 2, 3, 4];
var evens = _.remove(array, function(n) {
  console.log(n, JSON.stringify(array));
  return n % 2 == 0;
});
console.log("array", JSON.stringify(array));
console.log("evens", JSON.stringify(evens));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

运行该命令时,我看到:

1 [1,2,3,4]
2 [1,2,3,4]
3 [1,2,3,4]
4 [1,2,3,4]
array [1,3]
evens [2,4]

...这表明它首先执行回调,然后返回并删除相关条目。

尽管即使确实删除了它们,但是那些重叠的HTTP请求也会使我非常困扰。

相反,在删除所有文件后,我将一次保存容器:

angular.forEach(files_to_delete, function(file_to_delete) {
  const removed = _.remove(folders[file_to_delete.index].files, function(file) {
    return file === file_to_delete;
  });
  if (removed.length) {
    $http.put('/save_folders_file', folders[file_to_delete.index])       
  }
});