鍍金池/ 問(wèn)答/HTML/ weex的vuex采用storage模塊初始化狀態(tài),導(dǎo)致一直顯示加載中的Prog

weex的vuex采用storage模塊初始化狀態(tài),導(dǎo)致一直顯示加載中的ProgressBar

我的一些vuex中數(shù)據(jù)是持久化的,需要讀取上一次的結(jié)果,比如持久化登錄信息。
因?yàn)閣eex的storage采用異步方式,所以我必須先異步初始化store,然后初始化vue。
但問(wèn)題是采用這種方式,用playground或直接用android studio出來(lái)的app,都有一只在加載的圈圈在轉(zhuǎn)動(dòng),但是后面的界面顯示已經(jīng)完成了。
初步分析是WXPageActivity.java中的如下方法沒有被執(zhí)行:

  @Override
  public void onRenderSuccess(WXSDKInstance instance, int width, int height) {
    mProgressBar.setVisibility(View.GONE);
    mTipView.setVisibility(View.GONE);
  }

以下是我的代碼:

//獲取之前持久化信息
function getLogonInfo() {
  return new Promise(resolve => {
    store.getItem(key, e => {
      resolve(e.data)
    })
  })
}
//初始化store
function initStore() {
  return getLogonInfo().then(loginInfo => ({
      state: {
        user: loginInfo
      },
      mutations: {}
    }))
}
//初始化vue
initStore().then(state => {
  new Vue({
    el: '#app',
    store: state,
    router,
    render: h => h(App)
  })
})

其實(shí)簡(jiǎn)單的下面一句也能模擬復(fù)現(xiàn)這個(gè)問(wèn)題:
setTimeout(()=>{
 new Vue({
    el: '#app',
    store: state,
    router,
    render: h => h(App)
  })
},1000)

也就是異步啟動(dòng)Vue就會(huì)這種問(wèn)題。我在很多開源的weex項(xiàng)目都試過(guò)了,只要將new Vue
包裹在setTimeout中,都存在此問(wèn)題。
但是storage又是異步的,我只能采用異步方式,否則初始vue后很可能第一時(shí)間沒有獲取到一些之前的state信息比如登錄信息,導(dǎo)致被重定向到登錄頁(yè)面。

回答
編輯回答
舊時(shí)光

好吧,就這樣吧,只能禁用mProgressBar了

2018年3月13日 02:03