【问题标题】:Deletion with API sometimes works and sometimes it does not使用 API 删除有时有效,有时无效
【发布时间】:2019-03-21 15:45:48
【问题描述】:

我正在尝试使用 API 调用从文件夹中删除文件。 它似乎随机运行,有些文件被删除,有些则没有。

数据结构如下:

每个文件夹对象都有文件属性。
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)
             });

【问题讨论】:

  • 如果没有minimal reproducible example,我认为这是无法回答的。
  • return (file === file_to_delete); 在条件为if 的块中(file === file_to_delete) 似乎很奇怪。当然应该是return true;...?

标签: javascript angularjs lodash


【解决方案1】:

您的示例并不完全清楚,但看起来您每次找到要删除的文件时都会重复保存文件所在的容器。这似乎很混乱。它还假设 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] 数组 [1,3] 偶数 [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])       
  }
});

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 2015-02-11
    • 2012-08-02
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多