请问大家关于这个小程序请求接口的问题如何处理比较好?

我这个check_yundian_consent_agreement的接口,需要登录才能调用,

request.post({
        'url': api.consent_agreement,
        'data': {
            type:2 
        }
      }).then(function (res) {
        console.log(res,'res898')
      })

但是这个wx.login 的接口,是封装在request请求里的,我不知道如何做,能让wx.login这个接口先调用,然后再调用check_yundian_consent_agreement 的接口,有没有人大概理解我的意思。谢谢

import Promise from './promise'; 
import util from './util';   
export default {
  /**
   * 默认参数
   */
  setDefaults () {
    return {
      url: '',
      data: {},
      header: {
        'content-type': 'application/x-www-form-urlencoded' 
      },
      dataType: 'json',
      responseType: 'text',
    }
  }, 
  _request (mode, opt) {
    const rd3_key= {rd3_key:wx.getStorageSync("session_key")}
    const shop_id= {shop_id:wx.getStorageSync("shopinfo").shopid}
    const { url, data, header, dataType } = Object.assign({}, this.setDefaults(), mode, opt); 
    const result = new Promise((resolve, reject) => {
      wx.request({
        url: url,
        data:Object.assign(data,rd3_key,shop_id),
        header: header,
        method: mode,
        dataType: dataType,
        success (data) {
          // console.log(data)
          if(data && data.data.code == 4001){ 
            util.login()
          } 
          if(data && data.data.code == 444){  
            wx.showModal({
              title: '提示',
              content: '该店铺暂未启用',
              showCancel:false,
              success (res) {
                if (res.confirm) {
                    wx.clearStorageSync('shopinfo');
                    wx.clearStorageSync('wh_id');
                    wx.redirectTo({
                      url: '/pages/shoplogin/index',
                    })
                } else if (res.cancel) {
                  console.log('用户点击取消')
                }
              }
            }) 
          } 
          if (data && data.statusCode == 200 && data.data) {
            resolve(data.data);
          } else {
            reject(data);
          }
        },
        fail (err) {
          reject(err);
        }
      });
    });

    return result;
  },
  geturl(opt){
    let pages = getCurrentPages();
    //数组中最后一个即当前路由,options是参数
    let {options} = pages.pop();
    console.log() 
   
  },
  get (opt) {
    return this._request('GET', opt);
  }, 
  post (opt) {
    return this._request('POST', opt);  
  }
}

util.login() 这里就是调用了登录

阅读 1.7k
2 个回答

看你的情况是请求失败返回 401 之后才会去请求 wx.login。所以其实算是响应失败了才会去执行的部分。

所以你的思路并不是思考应该如何去先执行封装好的 request 方法中的 login方向不要错了。应该是在请求 check_yundian_consent_agreement 接口之前提前请求 login,这个就是你自己的业务逻辑了,在需要 login 的地方去 login 就好了。

最简单的就是在 check_yundian_consent_agreement 外包裹好 login 操作,完成请求之后再去执行 check_yundian_consent_agreement


本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

不用啊,你自己缕一下代码,你请求post,它其实就直接执行 _request 里面就直接执行 wx.login 了,感觉不用你自己另外去多余的工作,你请求的 check_yundian_consent_agreement 肯定是在登录后才可以请求的,不然就走到 4001里面去了

request.post({
        'url': api.consent_agreement,
        'data': {
            type:2 
        }
      }).then(function (res) {
        console.log(res,'res898')
      })
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题