在vue中使用for循环有异步请求,每次都只获取到最后一个数据解决办法

  1. 我预想是将标签数组(dynamicTags)使用for循环取出每个值,在遍历标签数组将值一一添加到数据库中,奈何for循环结束了,才去执行put请求,这就导致了只添了数组的最后一个值
  2. 原因是axios.put请求是异步请求,
  3. 解决方案,使用递归如下面代码所示,
    tag是一个数组用来存,标签
    dynamicTags是在页面中获取的标签名列表
  putTagItem(tag,articleId){
        var _this=this;
        
        if (tag<=0) {
          
        }else{
           _this.tag.articleId=articleId;
           _this.tag.tagName=_this.dynamicTags[tag-1];
            _this.$axios.put("http://localhost:8088/tags/addTag",_this.tag)
            .then(function (resp) {
             tag--;
             _this.putTagItem(tag,articleId) ;   
             });
        }
      }
你可以使用 Promise.all 方法来处理多个异步请求。具体实现步骤如下: 1. 定义一个数组,用于存储每次请求的数据。 2. 使用循环语句遍历需要发送的请求。 3. 在循环体内使用 axios 或 fetch 等工具发送请求,并将返回的 Promise 对象存储在一个数组。 4. 使用 Promise.all 方法,等待所有请求都完成,并将返回的数据数组作为参数传入 Promise.all 方法。 5. 在 Promise.all 的回调函数,将每次请求的数据追加到大数组。 下面是一个示例代码: ```javascript // 定义一个数组,用于存储每次请求的数据 let dataList = []; // 循环发送多个请求 for(let i=0; i<5; i++) { // 使用 axios 发送异步请求,并将返回的 Promise 对象存储在一个数组 let promise = axios.get('http://example.com/api/data/' + i); dataListPromise.push(promise); } // 等待所有请求都完成,并将返回的数据数组作为参数传入 Promise.all 方法 Promise.all(dataListPromise).then((dataListArr) => { // 在 Promise.all 的回调函数,将每次请求的数据追加到大数组 dataListArr.forEach((data) => { dataList = dataList.concat(data); }); }); ``` 在以上代码,我们使用了 axios 发送异步请求,并将返回的 Promise 对象存储在一个数组。然后,我们使用 Promise.all 方法等待所有请求都完成,并将返回的数据数组作为参数传入 Promise.all 方法。最后,在 Promise.all 的回调函数,我们将每次请求的数据追加到大数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值