收藏
回答

如何给wx.request增加重试机制?

不知道wx.request有内置的重试机制m啊?看上去像没有的样子。如果没有的话,在外层,有人有成熟的重试支持的代码吗?感谢。

回答关注问题邀请回答
收藏

4 个回答

  • 2021-07-09

    github上有改造成axios的:

    https://github.com/GreenPomelo/wx-axios

    2021-07-09
    有用 1
    回复 1
    • 邵小平
      邵小平
      2021-07-09
      感谢信息。但是这个并没有增加retry的能力,还得套其他的retry库才可以。
      2021-07-09
      回复
  • 卡卡
    卡卡
    2021-07-09

    自己简单写一个啊

    fucntion postRequest(params){
        wx.request({
            ...params,
        })
    } 
    fucntion retry(params,t=1){
        var tt = 0;
        var complete = params.complete;
        delete params.complete;
        var nP = {
            ...params,
            fail(res){
                tt++;
                if(tt>=t){
                   params.fail&& params.fail(res)
                }else{
                   postRequest(nP);
                }
            },
            complete(){
                if(tt>=t){
                   complete && complete (res)
                }
            }
          }
          postRequest(nP)
     }
    
    2021-07-09
    有用 1
    回复 1
    • 卡卡
      卡卡
      2021-07-09
      有用麻烦点有用,谢谢
      2021-07-09
      回复
  • 邵小平
    邵小平
    2021-07-09

    最后,我结合了stackoverflow上的答案

    https://stackoverflow.com/questions/38213668/promise-retry-design-patterns

    写了如下的支持。该代码开源在

    https://git.weixin.qq.com/jiji-opensouce/wx-xcx-empty-template/blob/master/utils/retry.js

    const wait = ms => new Promise(r => setTimeout(r, ms));
    
    
    const asyncRetry = (asyncFn, delay, retries, canRetry = ()=>true) => new Promise((resolve, reject) => {
      return asyncFn()
        .then(resolve)
        .catch((reason) => {
          if (retries > 1 && canRetry(reason)) {
            return wait(delay)
              .then(asyncRetry.bind(null, asyncFn, delay, retries - 1))
              .then(resolve)
              .catch(reject);
          }
          return reject(reason);
        });
    });
    
    // 使用示例:
     retry.asyncRetry(()=> request({ url: xxx, method: "GET" }), 2003);
    
    2021-07-09
    有用
    回复
  • xplee
    xplee
    2021-07-09

    可以看下这篇文章

    https://mp.weixin.qq.com/s/ldLZSRypuQuVwmSvqCF0Zg

    2021-07-09
    有用
    回复 1
    • 邵小平
      邵小平
      2021-07-09
      写的挺好的,可以做实现参考。
      2021-07-09
      回复
登录 后发表内容