直接写上我的部分代码和我期待的效果,请各路大神帮忙解答下
function(){
var bl = this.openLogin()
//因为是wx.request是异步 ,所以这里的bl还没有赋值 请问我该怎么写?
if (bl) {
} else {
}
}
openLogin:function(){
var _this = this;
wx.request({
url: getApp().globalData.ctPath,
data: {
wxOpenid: _this.globalData.openid
},
header: getApp().globalData.header,
success: function (res) {
if (res.data.user != null) {
return true;
}else{
return false;
}
}
})
}
那个是异步的吧,不能直接把 openLogin() 返回值赋给 bl 的,感觉写这个 Promise 貌似没什么用啊 😂 你在 success 回调里调用你下一步操作的函数好了
我知道写在success里可以用 但是这个方法可能有比较多的页面要调用 我就想提取出来 然后各个页面根据true/false来判断操作 不知道能不能实现
那就用 async/await 吧。
在你的代码上简单改写了一下:
async
function
(){
var
bl = await
this
.openLogin()
if
(bl) {
}
else
{
}
}
openLogin:
function
(){
var
_this =
this
;
return
new
Promise((resolve, reject) => {
wx.request({
url: getApp().globalData.ctPath,
data: {
wxOpenid: _this.globalData.openid
},
header: getApp().globalData.header,
success:
function
(res) {
if
(res.data.user !=
null
) {
resolve(
true
)
}
else
{
resolve(
false
)
}
}
})
})
}
不行啊 报错了
unknown: await is a reserved word
要把ES6转ES5取消勾选
还是不行 不弄了 我换个逻辑绕过去吧
引入es6-promise,然后使用promise,小程序原生不支持promise
直接用 https://github.com/mushan0x0/wxapp-api-interceptors 不就得了
这是修改后的代码,你试试
openLogin:function(){
var _this = this;
const
demo=
new
Promise((resolve, reject) => {
wx.request({
url: getApp().globalData.ctPath,
data: {
wxOpenid: _this.globalData.openid
},
header: getApp().globalData.header,
success: function (res) {
resolve(res)
}
})
})
demo.then(res=>{
if (res.data.user != null) {
return true;
}else{
return false;
}
})
}
使用es6语法
wechatide://minicode/BVKBEHmB7YV7