JavaScript怎么实现等for循环结束后在向下执行?

一、当看见这个标题时,你可能第一时间以为我是个傻子吧,for循环不就是等循环结束了再向下执行吗?

答:话不要说的太绝对哦,比如,循环里面包的是异步操作,像axios等,这种情况下,for循环的执行顺序就有问题了,它不会等异步结束后在执行,而是直接开始向下执行。

二、我怎么发现的?
答:好不容易走通vue前端直传文件到阿里云(第一篇文章有实现说明),我老大又让我实现多文件上传,为了功能更丝滑,所以不得不尝试,一尝试就出问题了,因为elemen-ui的upload自定义上传,上传几次调用几次方法,这样的话,每个文件上传返回的结果都要存到数据库,存数据库也需要调用axios,所以就起冲突了,没等我阿里云返回图片路径,就直接存数据库了,情况就是这个么个情况!

三、解决方法

答:将element-ui的upload自定义上传事件获取到的值存到一个新数组,这样的话,不管执行几次,都只会存到一个数组里,然后再用for循环遍历这个数组,实现多个文件的上传,将上传文的返回结果存放到要提交数据库的那个数组里,(这个for循环是重点,也是本文核心这样的话,就可以一次axios请求直接将包含文件路径的数组提交到数据库,不对,好像我说跑题了,言归正传,看代码吧还是:

//运用es6的方法,按这个方法就能等所有异步结束之后,再向下执行

// 接收上传图片的信息,循环遍历
    async aliPublish(items){
      for(let i = 0;i<items.length;i++){
        let objName = getFileNameID() + getFileName(items[i].file.name);
        let result = await client.put(`pics/${objName}`, items[i].file)
          // console.log(result,'res')
          if(result.res.status == 200){
            self.form.images.push(result.url)
          } else {
            self.$message.error('图片上传失败!')
            return
          }
      }
      // 等待循环结束,开始发布
      self.StartPublish()
    }

我这么胡咧咧也不知道有没有帮到各位,没办法,语文不好,不懂得可以私信我,我看见就回,不为别的,只是记录一下经历!让我们不断学习,不断进步!

猜你喜欢

转载自blog.csdn.net/weixin_48373171/article/details/129935539
今日推荐