鍍金池/ 問答/HTML5  HTML/ 小程序跨文件使用promise

小程序跨文件使用promise

promise的鏈?zhǔn)秸{(diào)用,在遇到跨文件的異步代碼的時候該怎么用?

我現(xiàn)在寫微信小程序,在app.js里調(diào)用wx.login,wx.getUserInfo以及自己服務(wù)器返回token和uid的接口。
但是在一個子頁面里需要拿到app.js里返回的uid才能再請求當(dāng)前頁面的request。因?yàn)槭强缥募?,所以這一串promise的鏈?zhǔn)秸{(diào)用該怎么寫呢?

回答
編輯回答
默念

var app=getApp();
console.info(app.uid,app.token);

2018年3月11日 13:57
編輯回答
巷尾

取uid應(yīng)該是一個異步,包一個promise ,然后在.then執(zhí)行request

2018年4月19日 00:01
編輯回答
獨(dú)特范

可以用事件通知機(jī)制,你這種情況適合使用發(fā)布訂閱模式

可以參考這個文章: https://aotu.io/notes/2017/01...

2018年5月5日 06:09
編輯回答
怣痛

是不是類似這種 只調(diào)用一次 其他調(diào)用都是用緩存

var getUid = (function(){
    var uid = null;
    var flag = true;
    var p = null;
    return function(){
        if(!uid){
            if(flag){
                flag = false;
                //第一次請求操作
                p = new Promise(function(resolve){
                    setTimeout(function(){
                        resolve(uid=123);
                    },2000)
                })
            }
            return p
        }else{
            return Promise.resolve(uid);
        }
    }
}());

getUid().then(function(v){
  console.log(v)//2秒后 輸出 123
})

getUid().then(function(v){
  console.log(v)//2秒后 輸出 123
})

setTimeout(function(){
  getUid().then(function(v){
    console.log(v)//5秒后 輸出 123
  })
},5000)
2017年9月22日 19:44