小程序系列--网络库封装(三)

处理请求成功

当网络操作成能,也就是能连上服务,调用接口获得到返回的数据,就会调用 success 方法。

success: function (res) {
    //网络成功
}

至于服务器业务逻辑是否成功就不知道了,所以接下来就要判断业务是否成功。
之前说过,服务器返回的结果有统一的JSON外壳,就可以用JSON外壳的retCode 来判断。如果retCode == 0 代表成功。通过定义getResultData 方法,用该方法的返回值来判断业务是否成功。

wx会自动将返回的JSON解析为json对象,不需要自己解析。

function getResultData(res) {
  //网络错误
  if (res.statusCode != 200) {
    return;
  }
  //服务器返回 null
  var data = res.data;
  if (!data) {
    return;
  }
  //服务器返回数据处理
  if (data.retCode == 0) {
    //返回的正确数据
    return data.data;
  }
}
  • res 为wx api返回的数据
  • res.statusCode 代表网络的状态码
  • res.data 为服务器返回的数据。如果data.retCode == 0 代表业务成功,就可以取出真正的业务数据了。

具体调用逻辑如下:

success: function (res) {
    var data = getResultData(res);
    if (data) {
      //请求成功
      wx.hideLoading();
      req.success(data);
     }else{
       //失败
     } 
}

req.success(data); 为调用 req 的success() 方法,将成功的结果回调回去。
所以req 对象中,必须有 url 字符串,data 对象 ,success 方法

处理失败业务逻辑

这里失败的逻辑与之前处理失败的逻辑相似,将错误的信息toast给用户即可。也可以处理其他的错误码逻辑。

//上接前面success()方法的else
else if (getResultCode(res) == -401) {
    //处理 -401
    relogin(req);
} else {
    wx.hideLoading();
    handleError(res);
    if (isHostMethod(req, "fail")) {
      req.fail();
   }
  1. 这里的 -401 是token过期的错误码。一般过期后重新登录即可。如何登录以后再说。
  2. handleError(res) 是对服务器返回的错误信息进行toast提示,具体如下:
function handleError(res) {
  //网络错误
  if (res.statusCode != 200) {
    showErrorToast("[" + res.statusCode + "]异常");
    return;
  }
  //服务器返回 null
  var data = res.data;
  if (!data) {
    showErrorToast();
    return;
  }
  //服务器返回数据处理
  if (data.retCode == 0) {
    //返回的正确数据
    return data.data;
  } else if (data.msg) {
    //返回的错误信息
    showErrorToast(data.msg);
  } else {
    //处理错误
    showErrorToast();
  }
}
  1. isHostMethod() 是判断 req 对象是否含有 ‘fail'方法,这个方法是选填的。有的话,将网络失败回调过去,没有则不处理。

req对象可以有fail()方法也可以没有,主要为了处理一些loading逻辑。

function isHostMethod(object, property) {
  var t = typeof object[property];
  return t == 'function' || (!!(t == 'object' && object[property])) || t == 'unknown';
}

gitHub源码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容