We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
小程序原生的wx.request请求代码量繁琐,且容易造成回调地狱,不利于维护。利用Promise封装小程序请求,再封装包裹请求函数reqWrapper全局调用,大大减少代码量,提高可维护性。(注意,以下是以ts编写,可以根据需要改为js)
// 优化后的请求 API.getTest(entryData).then((res: any) => {}) .catch((err: string) => { console.error(err) }) // 原生的请求 wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '', y: '' }, method: 'POST', success (res: any) { console.log(res.data) }, fail (res: any) { console.log(res.data) })
那么我们需要如何做呢?
公司里一位大佬开发的登录态管理的网络请求组件weRequest,解决繁琐的小程序会话管理,具体可以移步学习。引入后按照文档指引配置request.ts。
let weRequest = require('./weRequest.js'); weRequest.init({ // [必填] 后端在接口中返回登录成功后的第三方登录态 getSession: function (res: any) {}, // [必填] 用code换取session的CGI配置 codeToSession: { // [必填] CGI的URL url: ``, // [必填] CGI中返回的session值 success: function (res: any) {} }, // [必填] 触发重新登录的条件,res为CGI返回的数据 loginTrigger: function (res: any) { // 此处例子:当返回数据中的字段errcode等于-1,会自动触发重新登录 }, // 登录重试次数,当连续请求登录接口返回失败次数超过这个次数,将不再重试登录 reLoginLimit: 2, // 触发请求成功的条件 successTrigger: function (res: any) { // 此处例子:当返回数据中的字段ret_code等于0时,代表请求成功,其他情况都认为业务逻辑失败 return res.ret_code == 0; }, // 成功之后返回数据;可不传 successData: function (res: any) { // 此处例子:返回数据中的字段data为业务接受到的数据 return res; }, // 当CGI返回错误时,弹框提示的标题文字 errorTitle: function () { return '操作失败' }, // 当CGI返回错误时,弹框提示的内容文字 errorContent: function (res: any) { return (res.msg ? res.ret_msg : '操作失败'); }, doNotUseQueryString: true }); export default weRequest
import weRequest from '../lib/request'
/** * 包裹函数 * @param opts weRequest参数 * @param data 接口参数 * @param url cgi路径 * @param reqOpts 请求方式,默认为POST,可选 */ let reqWrapper = (data: object, url: string, reqLoad?: boolean, reqOpts?: string) => { let param = Object.assign({}, data) return weRequest.request(Object.assign({}, { url: url, data: param, method: reqOpts? reqOpts : 'POST', showLoading: reqLoad? reqLoad : false //当为true时,请求该cgi会有loading })) } export default { // 把请求export出去,比如 saveTest(opts: RequestBody.saveTest): Promise<ResponseBody.saveTest> { return reqWrapper(opts, url , true) }, }
当我们封装完请求函数后,由于我们在第一步request.ts中,设置了触发请求成功的条件successTrigger,以及默认报错弹窗errorTitle、errorContent。所以一旦我们接口报错了,就会默认触发报错弹窗,我们在catch中也捕获不到err错误,但 weRequest 提供了自定义报错处理的函数fail,我们可以这样封装我们的函数:
/** * 包裹函数 * @param opts weRequest参数 * @param data 接口参数 * @param url cgi路径 * @param reqOpts 请求方式,默认为POST,可选 * @param faliReport 是否有xxx函数,可选 */ let reqWrapper = (data: object, url: string, faliReport?: any, reqLoad?: boolean, reqOpts?: string) => { let param = Object.assign({}, data) return weRequest.request(Object.assign({}, { url: url, data: param, showLoading: reqLoad ? reqLoad : false, //请求过程中是否展示loading method: reqOpts ? reqOpts : 'POST', fail: faliReport ? function () { faliReport() } : '' })) } export default { // 把请求export出去,比如 saveTest(opts: RequestBody.saveTest, faliReport: unknown): Promise<ResponseBody.saveTest> { return reqWrapper(opts, url , faliReport) }, }
基于上面的封装,我们可以在调用函数的时候,传入我们想自定义报错的xxx函数,这样就可以自定义报错提示了
import API from "../../api";
Page({ data: {}, onLoad(query: any) { this.test() }, test: function () { const self = this; let entryData: RequestBody = {}; let testErrorFunction = self. testErrorFunction; //如果需要自定义报错,则传入函数xxx API.getTest(entryData, self.testErrorFunction).then((res: any) => {}) .catch((err: string) => { console.error(err) }) }, //自定义报错xxx函数 testErrorFunction: function () { console.long('error') } })
The text was updated successfully, but these errors were encountered:
No branches or pull requests
前言
小程序原生的wx.request请求代码量繁琐,且容易造成回调地狱,不利于维护。利用Promise封装小程序请求,再封装包裹请求函数reqWrapper全局调用,大大减少代码量,提高可维护性。(注意,以下是以ts编写,可以根据需要改为js)
请求优雅化 VS 原生请求:
那么我们需要如何做呢?
一、引入登录态管理的网络请求组件weRequest
公司里一位大佬开发的登录态管理的网络请求组件weRequest,解决繁琐的小程序会话管理,具体可以移步学习。引入后按照文档指引配置request.ts。
二、封装包裹请求函数
三、自定义报错提示
当我们封装完请求函数后,由于我们在第一步request.ts中,设置了触发请求成功的条件successTrigger,以及默认报错弹窗errorTitle、errorContent。所以一旦我们接口报错了,就会默认触发报错弹窗,我们在catch中也捕获不到err错误,但 weRequest 提供了自定义报错处理的函数fail,我们可以这样封装我们的函数:
基于上面的封装,我们可以在调用函数的时候,传入我们想自定义报错的xxx函数,这样就可以自定义报错提示了
四、小程序页面中使用
The text was updated successfully, but these errors were encountered: