美文网首页
一段致命代码

一段致命代码

作者: 一个废人 | 来源:发表于2018-03-09 21:38 被阅读13次

今天测试代码,发现一个致命bug,在做删除文件处理时,我通过文件名查找当前删除项,结果由于没有考虑到文件列表里会出现同名文件,所以对本文件的删除可能会导致同名文件也被删除。

deleteExistedFile(file){
      let data = {}
      data.loanId = this.loanId
      data.docId = this.loanDocument.id
      data.filename = file.name
      return remove(data).then((res)=>{
        for(let i=0;i<this.fileStack.length;i++){
          let item = this.fileStack[i]
          if(item.name === file.name || item === file.name){
            this.fileStack.splice(i,1)
          }
        }
        this.validate()
      }).catch((e)=>{

      })
    },

这段代码的问题是,我删第一个fan.jpg时,i=0,fileList被splice掉了第一个。第二次循环时i=1,之前为i=2时的fan.jpg在此时已经变成新的fileList里的i=1。结果就是,删第一个fan.jpg时,会把第三个fan.jpg删掉。
致命原因为:我对正在循环的数组进行了“增删”操作

1171520600785_.pic.jpg 1191520600965_.pic.jpg

于是我把用文件名查找改成了通过fileStack的index查找,这样就避免了多删的情况:

deleteExistedFile(file, index){
      let data = {}
      data.loanId = this.loanId
      data.docId = this.loanDocument.id
      data.filename = file.name
      return remove(data).then((res)=>{
        this.fileStack.splice(index,1)
        this.validate()
      }).catch((e)=>{
        
      })
    },

但是,这样写只能适用于单文件一个个删除,如果多文件同时删除的话,又会出现问题。
所以,我能想最好的解决方式就是,先通过循环的方式给数组里要删除的item加上readyToRemove=true的标签,循环结束,再对加了标签的新数组进行map,去除item. readyToRemove=true的项。

核心思想

千万不要对正在for循环的数组进行增删操作

相关文章

  • 一段致命代码

    今天测试代码,发现一个致命bug,在做删除文件处理时,我通过文件名查找当前删除项,结果由于没有考虑到文件列表里会出...

  • golang 实现的简易 https server 出现 "to

    下面是一个很简易的 https server 的 golang 实现,网上常见的一段代码,但其实有一个致命问题。 ...

  • 一段代码

    //@“”常量池 NSString *str1 = @"hh"; NSString *str2 = @"hh"; ...

  • php简单的代码重用与函数编写

    代码重用require() 语句执行失败会给出致命的错误 一个fatal error, 直接结束脚本include...

  • code snippet test.md

    很容易看出来,简书的Markdown格式文档不支持代码高亮 我是一段C代码 我是一段PHP代码 我是一段JS代码

  • Block的基本使用

    1.Block代码块的基本使用 Block的作用Block主要用来保存一段代码Block可以封装一段代码,这段代码...

  • [转]自定义Gradle插件 + ASM实现字节码插桩

    1. 什么是插桩? 用通俗的话来讲,插桩就是将一段代码通过某种策略插入到另一段代码,或替换另一段代码。这里的代码可...

  • iOS一段代码

    如果对你有用的话多多关注我

  • 写一段代码

    键帽落下了思绪 电流极速的反应 一个个字母排着队出现 不紧不慢 如同千万年阴晴圆缺 再健壮的程序 也有断电后无法重...

  • 一段时钟代码

网友评论

      本文标题:一段致命代码

      本文链接:https://www.haomeiwen.com/subject/uximfftx.html