当前位置:编程学习 > > 正文

jspromise原理(JavaScript使用promise处理多重复请求)

时间:2022-01-24 00:02:17类别:编程学习

jspromise原理

JavaScript使用promise处理多重复请求一、为什么要写这个文章?

处理重复请求的文章想必大家也看过了很多,大多数都是分为在response返回之前发现重复请求就return掉的和使用节流/防抖来间接规避用户频繁操作两种版本的。最近在使用的过程的中,发现这两个版本在某些场景下还是有些局限性。

二、问题场景

如图,我这个h5的页面,顶部和底部都要显示这个名片组件。这些名片的信息是通过一个接口来获取的,当这个组件在当前页面被初始化时,就会发生两次重复的请求。

jspromise原理(JavaScript使用promise处理多重复请求)

jspromise原理(JavaScript使用promise处理多重复请求)

这时会面临几个抉择:

1. 不对重复请求做任何处理。

2. 对重复请求直接return掉。这也是部分文章的做法,不过这种做法有种局限性,就是直接认定后面的重复请求均为无效请求。

3. 把请求从组件中抽离出来放到父级的业务页面中,再以props的方式传进组件。

三、解决方式

核心思想

这个方案是什么都可以使用的,无论是使用axios、jq、fetch、小程序request。这里就写实现的原理,使用时直接把对应的代码放到对应的请求时机即可。

代码示例

  • let handleList = [] // 请求列表
    /**
     * 模拟请求
     * @author waldon
     * @date 2020/6/9
     */
    const httpRequest = () => {
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve(`请求成功,时间戳为:${new Date().getTime()}`)
        }, 1000)
      })
    }
    /**
     * 请求的相关处理
     * @author waldon
     * @date 2020/6/9
     * @param {String} url -
     * @param {Object} requestObj - 请求参数
     * @returns {Promise} - 请求的promise
     */
    function requestTest(url, requestObj = {}) {
      // 因为入参一般不会涉及到复杂类型,JSON.stri.jpg" alt="jspromise原理(JavaScript使用promise处理多重复请求)" border="0" />
    
  • 输出结果

    存在重复请求,直接返回
    存在重复请求,直接返回
    首次请求结果 请求成功,时间戳为:1621650375540
    handleList: [
      {
        url: '/ajax/sameUrl',
        requestObj: { name: 'waldon' },
        handle: Promise { '请求成功,时间戳为:1621650375540' }
      }
    ]
    重复请求结果 请求成功,时间戳为:1621650375540
    handleList: [
      {
        url: '/ajax/sameUrl',
        requestObj: { name: 'waldon' },
        handle: Promise { '请求成功,时间戳为:1621650375540' }
      }
    ]
    重复请求结果 请求成功,时间戳为:1621650375540
    handleList: [
      {
        url: '/ajax/sameUrl',
        requestObj: { name: 'waldon' },
        handle: Promise { '请求成功,时间戳为:1621650375540' }
      }
    ]
    请求完成后的handleList: []

    代码地址 codepen

    https://codepen.io/waldonUB/pen/ZEeeONM

    注意的点

    到此这篇关于JavaScript使用promise处理多重复请求的文章就介绍到这了,更多相关js promise多重复请求内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐