问题:想要获取wx.requst的回调结果,但是实际调用的时候,是得不到的。因为代码顺序执行,参考checkSmsCode代码,共三步:
- 定义参数
- 拉起requst
- return 一个值
想一下,我们想获取的值在第几步?
很明显,在第二步中:拉起requst。只要requst正确执行,就会收到想要的res,如下。
success(res)
但问题出在,顺序执行的代码中,第二步只需要“成功拉起requst”,就执行第三步“return”,而不会等待你的回调结果传来,才继续执行。
因此,如何等待回调结果回来,并得到它,是解决的根本问题。
小程序中,调用checkSmsCode()功能,获取wx.request的回调结果。code如下
var checkCode = await this.checkSmsCode();
console.log("checkCode-----------------")
console.log(checkCode)
console.log("checkCode-----------------")
if (checkCode=="9999") {
wx.showToast({
title: "验证码错误!",
icon: "none",
mask: true
});
return false;
}
checkSmsCode函数如下
async checkSmsCode(){
let encodeStr = paramSign('checksms', {
receiver: this.data.phone_number,
checkcode: this.data.sms_vcode,
temptag: "************",
channel: "************",
});
var result1;
wx.request({
url: '**************************************',
method: 'POST',
dataType: 'json',
responseType: 'text',
success:function(res) {
if ("0000" == res.data.result) {
result1="0000";
} else {
result1="9999";
}
resolve();
}
})
})
return result1; // <!--常规return,并不能“即时”返回 request的回调结果。-->
},
解决方案
checkSmsCode函数增加两行语句:
async checkSmsCode(){
let encodeStr = paramSign('checksms', {
receiver: this.data.phone_number,
checkcode: this.data.sms_vcode,
temptag: "************",
channel: "****************",
});
var result1;
const promise=new Promise(function (resolve, reject) { // <!--第 1 处新增语句-->
wx.request({
url: '**************************************',
method: 'POST',
dataType: 'json',
responseType: 'text',
success:function(res) {
if ("0000" == res.data.result) {
result1="0000";
} else {
console.log("now is else error")
result1="9999";
console.log("result1111111111:"+result1)
}
resolve();
}
})
})
//return result1; // <!--常规return,并不能“即时”返回 request的回调结果。因此替换如下-->
return promise.then(function(){ // <!--第 2 处新增语句-->
return result1;
},function(){})
},