这几天在工作中遇到了一个这样的需求:在初始化一个对象的时候要给该对象传一个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);
},
})
});
}
//打完收工
注:在你按照此方法完成同步请求的时候不要高兴太早,他可能会报错哦!!!报错请选中微信开发者工具本地设置中的增强编译选项
注:在你按照此方法完成同步请求的时候不要高兴太早,他可能会报错哦!!!报错请选中微信开发者工具本地设置中的增强编译选项
注:在你按照此方法完成同步请求的时候不要高兴太早,他可能会报错哦!!!报错请选中微信开发者工具本地设置中的增强编译选项
重要的事说三遍!!!!!!
微信小程序复杂同步请求封装结束!