收藏
回答

wx.request不支持async/await编程模式的原因及替代方案?

虽然文档中表明了wx.request等基础API不支持 async/await,我还是不明白为什么? 如果一个任务要做10个异步网络调用,没有这个写法,代码会很难看。


不知道社区有其他的替代方案吗?有人开源了自己写的较高质量的Promise封装吗?


感谢

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

2 个回答

  • 猛男陈阔
    猛男陈阔
    2021-07-08
    const request = params =>{
      const {url,method,header,data} = params
       return new Promise((resolve, reject) => {
         wx.request({
           url,
           data,
          header,
          method,
          success:function(res){
            resolve(res)
         }
        })
      })
    }
    
    async initRequest(){
      await request({})
      await request({})
      await request({})
     }
    
    2021-07-08
    有用 6
    回复 1
    • 邵小平
      邵小平
      2021-07-08
      谢谢。类似的事情,不知道为啥官方没有做?
      2021-07-08
      回复
  • 邵小平
    邵小平
    2021-07-08

    参考这个讨论https://developers.weixin.qq.com/community/develop/doc/00064cc26bc058a6a848f238351c00

    写了份实现代码开源在这,有增强的朋友可以在增强

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

    function request(params{
      const { url, method, header, data } = params
      let taskController;
      let task = new Promise((resolve, reject) => {
        taskController = wx.request({
          url,
          header,
          data,
          method,
          success(res) {
            resolve(res)
          },
          fail(err) {
            reject({
              msg'请求失败',
              url,
              method,
              data,
              header,
              err,
            })
          }
        })
      });
      return { task, taskController };
    }
    
    // 使用 示例
     request({ url"http://www.qq.com"method"GET" }).task.then(res=> console.log(res));
    
    request({ url"http://www.qq.com"method"GET" }).taskController.abort();
    


    2021-07-08
    有用
    回复
登录 后发表内容