【问题标题】:Asynchronous VuexFire Data Fetch With Then/Catch使用 then/Catch 异步获取 VuexFire 数据
【发布时间】:2020-03-02 11:15:55
【问题描述】:

给定以下名为 init 的有效 vuex 操作,它获取 settingsaccounts 集合:

actions: {
  init: firestoreAction(({ bindFirestoreRef, commit }, payload) => {
    bindFirestoreRef(
      'settings', fb.settings.doc(payload),
    )
      .then(() => commit('SETTINGS_READY', true))
      .catch((err) => {
        commit('SNACKBAR_TEXT', err.message);
        Sentry.captureException(err);
      });

    bindFirestoreRef(
      'accounts', fb.accounts.where('program', '==', payload),
    )
      .then(() => commit('ACCOUNTS_READY', true))
      .catch((err) => {
        commit('SNACKBAR_TEXT', err.message);
        Sentry.captureException(err);
      });
  }),
},

我有两个问题:

  1. 代码似乎是同步运行的,但我希望异步获取两个集合以最大限度地提高性能。如何实现?
  2. 是否可以将此代码重构为更简洁,同时提供示例中存在的独立(和同步)then/catch 功能?

【问题讨论】:

    标签: vue.js google-cloud-firestore vuex vuexfire


    【解决方案1】:

    您可以使用async / await 函数,然后在Promise 构造函数中调用bindFirestoreRef

    actions: {
    init: firestoreAction(async ({ bindFirestoreRef, commit }, payload) => {
        await Promise((resolve, reject) => {
          bindFirestoreRef('settings', fb.settings.doc(payload))
            .then((res) => {
              commit('SETTINGS_READY', true);
              resolve(res);
            })
            .catch((err) => {
              commit('SNACKBAR_TEXT', err.message)
              Sentry.captureException(err)
              reject(err)
            })
        })
    
        await new Promise((resolve, reject) => {
          bindFirestoreRef('accounts', fb.accounts.where('program', '==', payload))
            .then((res) => {
              commit('ACCOUNTS_READY', true);
              resolve(res);
            })
            .catch((err) => {
              commit('SNACKBAR_TEXT', err.message)
              Sentry.captureException(err)
              reject(err)
            })
        })
      }) 
    },
    

    【讨论】:

    • 我之前考虑过使用async/await,但认为第二个await 会同步等待第一个await 解决。将new Promiseawait 一起使用是否会改变这一点并允许两个等待是异步的?
    • 我能够测试这段代码,据我所知,它似乎在await 级别也是同步的。
    • @ßiansor Å。 Ålmerol,你愿意看看另一个 Vuexfire 问题吗? stackoverflow.com/questions/59903702/…
    猜你喜欢
    • 2021-02-04
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2012-04-08
    相关资源
    最近更新 更多