美文网首页
javascript for循环+异步请求导致请求顺序不一致

javascript for循环+异步请求导致请求顺序不一致

作者: 糖醋里脊120625 | 来源:发表于2019-12-24 09:33 被阅读0次

    遇到一个问题
    for循环,再把循环出来的ID再进行二次请求
    这就导致一个问题
    请求结果返回顺序不一致
    原因:异步请求会把回调事件放入微任务事件队列,宏任务执行完毕再执行微任务,具体参考事件队列机制

    解决方法:
    通过map方法进行循环请求
    将异步请求方法封装起来,返回一个promise
    这样将会返回一个具有多个promise的数组
    通过promise.all()方法把promise包装成一个新的promise实例

     // 通过Promise把所有的异步请求放进事件队列中
      getInfo(item ,index) {
          const ms = 1000 * Math.ceil(Math.random() * 3)
          return new Promise((resolve,reject) => {
              setTimeout(() => {
                 axios.get(id).then((result) => {
                     resolve(result)
                 })
              }, ms)
         })
     }
     
     // 返回多个promise
     let promise = arr.map((item,index) = > {
         arr.forEach((item, index) => {
             return getInfo(item, index)
         })
     })
     // 对返回的promise数组进行操作
     Peomise.all(promise).then((allData) => {
         arr.forEach((item, index) => {
             // ......
         })
     })
    

    相关文章

      网友评论

          本文标题:javascript for循环+异步请求导致请求顺序不一致

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