【微信小程序】缓存轮询--确保前端请求的安全有序进行

轮询函数的主要目的是等待特定条件的发生,通过轮询的方式检查条件是否已经满足。它接受一个配置对象作为参数,可以设置轮询的间隔、次数、轮询字段等。函数会返回一个 Promise 对象,可以通过 .then() 和 .catch() 处理轮询的结果。

function polling(config) {
  // 默认配置
  const defaultConfig = {
    time: 200,   // 轮询间隔
    times: 30,   // 轮询次数
    key: "",     // 轮询字段
    reKey: "",
    that: null
  }
  // 合并默认配置和传入的配置参数
  const mergedConfig = { ...defaultConfig, ...config };
  
  let t = 0;

  // 返回一个 Promise 对象,用于处理轮询结果
  return new Promise((resolve, reject) => {
    const f = () => {
      if (mergedConfig.reKey && wx.getStorageSync(mergedConfig.reKey)) {
        // 如果存在 reKey,并且存储中有与之对应的值,就解析为 false 并结束轮询
        resolve(false);
        return;
      }
      t++;
      if (t >= mergedConfig.times) {
        // 如果达到最大轮询次数仍未满足条件,就拒绝 Promise
        reject();
        return;
      } else if ((mergedConfig.that && mergedConfig.that.data[mergedConfig.key]) || wx.getStorageSync(mergedConfig.key)) {
        // 如果满足条件,就解析为 true 并结束轮询
        resolve(true);
        return;
      } else {
        // 否则,等待指定时间后再次执行轮询
        setTimeout(f, mergedConfig.time);
      }
    };

    // 初始执行轮询函数
    f();
  });
}

f() 函数是一个用于轮询操作的递归函数,它根据不同的条件来决定是继续轮询,提前结束轮询,还是拒绝轮询。这个函数的执行过程会根据条件的满足与否而不断地递归执行,直到满足了特定的条件或达到最大轮询次数为止。

使用场景:
例如在小程序页面生命周期中onShow 需要调用接口,但是由于需要小程序生命周期onLaunch中向后端请求token,因为请求token接口没有返回,此时调用其他接口必将失败,此时我们可以

  /**
   * 生命周期函数--监听页面显示
   */
  async onShow() {
    await polling('Authorization')
    // TODO ... 这里可以做其他请求操作,保证在请求之前,taken接口一定有返回了。
  },
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值