小程式好多介面都是異步的,我找了網上的資料,采用了promise的方法:
在app.js中定義一個授權注冊的function:
reg: function (action) //授權,這里邊的幾個介面都是網上搜的wxapi的介面,用著正常,可以按步執行
{
console.log('1r-開始授權:' + action)
var userInfo;
var that = this;
var memcode = '';
utils2.getSetting().then(res => {
console.log('getSetting--->', res);
return utils2.getUserInfo();
}).then(res => {
console.log('userInfo--->', res);
userInfo: res.userInfo,
that.globalData.userInfo = res.userInfo
console.log('2r-獲取userinfo:' + userInfo)
return utils2.login();
}).then(res =>{
console.log('3r-直接重登請求code:' + res.code)
that.globalData.memcode = res.code;
memcode = res.code;
console.log('11r-授權執行完畢:')
return true;
})
return false;
},
=======================
如果我在首頁呼叫這個函式,不等回傳值就直接下去了,沒有辦法按成功與否執行,我思考了一下,照貓畫虎弄一個promise,可還是不行
嘗試1:
const p1 = new Promise((resolve, reject) => {
var sss = app.reg();
if(sss){
console.log('授權完畢1')
}
else
console.log('授權完畢2')
});
嘗試2
const p1 = new Promise((resolve, reject) => {
var sss = app.reg();
if (sss) {
resolve('success')
console.log('11111');
} else {
console.log('2222');
reject('err')
}
});
p1.then(data => {
console.log('p1=',data); // hello
return data + 'world';
console.log('授權完畢')
}, err => {
console.log(err); // 回傳的是 reject(value) 的值
return err + 'err';
})
===============
兩個代碼結果都是不等,直接回傳false,我對promise了解不深,沒有辦法了,緊急求助,
代碼可能很初級,大家別笑我,歡迎賜教啊!!
uj5u.com熱心網友回復:
好像自己解決了,在reg里邊弄個promise并回傳promise,(不能回傳true false)reg: function (action) //授權,這里邊的幾個介面都是網上搜的wxapi的介面,用著正常,可以按步執行
{
console.log('1r-開始授權:' + action)
var userInfo;
var that = this;
var memcode = '';
let promise = new Promise((resolve, reject) => {
utils2.getSetting().then(res => {
console.log('getSetting--->', res);
return utils2.getUserInfo();
}).then(res => {
console.log('userInfo--->', res);
userInfo: res.userInfo,
that.globalData.userInfo = res.userInfo
console.log('2r-獲取userinfo:' + userInfo)
return utils2.login();
}).then(res =>{
console.log('3r-直接重登請求code:' + res.code)
that.globalData.memcode = res.code;
memcode = res.code;
console.log('11r-授權執行完畢:')
resolve(true);
}).catch(err => {
console.log('12r-授權執行完畢-出錯:',err)
reject(false);
});
return promise ;
},
在呼叫端這么寫
console.log('開始授權')
app.reg().then((res) => {
console.log('授權成功了' , res);
wx.showToast({
title: '授權成功,感謝支持',
icon: "success"
})
}, (error) => {
console.log('登錄失敗了:' + error);
……
})
貌似可以,期待大蝦能給出更好的方案~~
uj5u.com熱心網友回復:
promise不是這樣用的,promise內是同步執行的,建議p1用async await來寫,然后var sss=await app.reg()轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/75648.html
標籤:微信開發
