美文网首页
前端处理异步请求顺序

前端处理异步请求顺序

作者: 野蛮生长_ed2e | 来源:发表于2020-04-01 11:28 被阅读0次

之前有一道面试题 一个模糊搜索组件如何设计 首先防抖截流什么的肯定是能想到了 主要是一个问题 promise有一个缺点 就是如果前一个请求返回比较慢 会导致覆盖最新的请求结果 因此这个问题是最核心的考察点
我们可以参考promise.race原理的思想 返回慢的一直让它pending就好了 因此 我们可以将上一个请求一直pending就好了

function request (t) {
    return new Promise(resolve => {
        setTimeout(function () {
            resolve(t)
        }, t)
    })
}

var map = {}

function getLatest (key, fn, time) {
    if (!map[key]) {
        map[key] = 1
    }
 
    return new Promise((_res, _rej) => {
      resolve = (val) => {
           _res(val)
      } 
      reject = (val) => {
        _rej(val)
      }
      var t = Date.now()
      map[key] = t
      fn(time).then(res => {
          console.log(t, map[key], '/t < map[key]');
          if (t < map[key]) return
          resolve(res)
      }).catch(error => {
          if (t < map[key]) return
          reject(error)
        })
     })
        
   
}
getLatest('a', request, 4000).then(res => {
    console.log(res, '/////')
})

setTimeout(() => {
  getLatest('a', request, 1000).then(res => {
        console.log(res, '//////')
    })
    
}, 1000)

我们只需要将请求包一层promise就可以 如果是上一次的请求 就直接return 这样就取消之前的请求啦🤩
再总结一下promise.race

var race = function (array) {
    return new Promise((resolve, reject) => {
      array.forEach((item) => {
          item.then((res) => {
            resolve(res)
          }).catch((err) => {
              reject(err)
          })
        })
    })
}

相关文章

  • 前端处理异步请求顺序

    之前有一道面试题 一个模糊搜索组件如何设计 首先防抖截流什么的肯定是能想到了 主要是一个问题 promise有一个...

  • 网络异步请求同步、顺序处理

    一、异步网络请求按顺序请求(信号量) 打印结果 二、多个网络异步请求最后同步(Group) 打印结果 三、多个网络...

  • IntentService和HandlerThread

    IntentService 概述 处理异步请求的Service 客户端使用startService()发送异步请求...

  • 异步

    异步 异步请求 同步请求:同一个请求由一个线程从头到尾进行处理 一步到位 异步请求:同一个请求中由多个线程进行处理...

  • 异步请求处理

    经常会有小伙伴问异步的问题,异步处理方案有很多,我来说一下我常用的。 背景:我们需要上传图片到oss,拿到oss返...

  • iOS多个网络请求同步执行

    这里所说的同步执行是指多个网络请求按顺序执行,但这些请求还是可以在异步线程处理的不会阻塞主线程;首先我们看一个实际...

  • 20170814

    前端使用异步的场景 定时任务:setTimeout, setInverval 网络请求:ajax请求,动态 加载 ...

  • iOS 网络请求回调问题

    1、多个网络请求完成后通知继续执行 2、多个异步请求,顺序回调结果

  • 为什么要用Promise

    起因 大家都知道做前端开发的时候最让人头痛的就是处理异步请求的情况,在请求到的成功回调函数里继续写函数,长此以往形...

  • 为什么要使用promise

    起因 大家都知道做前端开发的时候最让人头痛的就是处理异步请求的情况,在请求到的成功回调函数里继续写函数,长此以往形...

网友评论

      本文标题:前端处理异步请求顺序

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