这几天在工作中遇到了一个这样的需求:在初始化一个对象的时候要给该对象传一个function(要求同步从后端请求并返回请求得到的值),这个难道了我一个干后端的,请假了几位前端大神无果准备自己干。如果有用请赞我、废话不说上代码:
1、场景:
var obj = new object(a)a:function(){ wx.request({ url: url, data: { 'name' =obj.XX, 'id' = obj.XX }, method: 'POST', header: { 'content-type': 'application/json' }, success: function(res) { that.data.phr = res.data }, }) return that.data.phr}在class object中: var abj = a();XXXXXXXXXXXXX=abj;问题描述:该方法a需要使用obj中暴露出来的数据,obj中需要使用a中返回的参数,由于语法要求不能像上述代码中一样在后台返回数据之后直接return该数据。
2、问题解决
//class object中对使用该参数a的方法做同步处理export default{Object:function(a) { var _this = this; var b =null//type = String //参数a的类型校验略... b:async function(){ _this.b = await a(); }}}//onLoad: function (options) { var obj = new object(a)}a:function(){ var that = this await that.sendRequest(url, { 'name': obj.name, 'id': obj.id }).then(res = { console.log(res.data) that.setData({ phr: res.data }) }) return that.data.phr} // 利用Promise进行同步请求封装 sendRequest: function(url, params) { var that = this; return new Promise(function(resolve, reject) { wx.request({ url: url, data: params, method: "POST", header: { "Content-Type": "application/json;charset=UTF-8", }, success: function(res) { resolve(res.data); }, fail: function(res) { reject(res); }, }) }); }//打完收工注:在你按照此方法完成同步请求的时候不要高兴太早,他可能会报错哦!!!报错请选中微信开发者工具本地设置中的增强编译选项
注:在你按照此方法完成同步请求的时候不要高兴太早,他可能会报错哦!!!报错请选中微信开发者工具本地设置中的增强编译选项
注:在你按照此方法完成同步请求的时候不要高兴太早,他可能会报错哦!!!报错请选中微信开发者工具本地设置中的增强编译选项
重要的事说三遍!!!!!!
微信小程序复杂同步请求封装结束!













