【问题标题】:How to wait for api call on js export?如何等待 js 导出的 api 调用?
【发布时间】:2019-11-24 22:03:29
【问题描述】:

我有一个 Vue 应用程序,用于初始化我的 firestore 应用程序。我的代码如下所示:

if (firebase.apps.length) {
  firebase.app()
} else {
  firebase.initializeApp(config)
}
export const Firestore = firebase.firestore()
export const Auth = firebase.auth()

现在我想从一些 API 中获取配置文件。这意味着,而不是做 firebase.initializeApp(配置) 我想做类似的事情:

axios.get('https://.../config.json', {})
    .then(async ({ data }) => {
      firebase.initializeApp(data)
    })
    .catch((err) => {
      console.log('error', err)
    })

但我的导出必须等到我从 API 获得响应并初始化应用程序。

如何使用 async/await 或任何其他模式让导出等待?

【问题讨论】:

    标签: javascript firebase vue.js async-await


    【解决方案1】:

    你可以这样做:

    export const initialize = () => {
     try {
       return axios.get('https://.../config.json', {})
        } catch(err) {
          console.log('error', err)
        }
      }
    

    然后在另一个js文件中,可以先导入,然后执行以下操作:

    initialize().then(data => {
    firebase.initializeApp(data)
    firebase.firestore()
    }).catch((err) => {
        console.log(err);
    });
    

    没有必要导出firebase.firestore(),因为如果你想使用firestore,你将在每个js文件中调用它。

    您真正需要导出的唯一方法是firebase.initializeApp(data),您可以将其添加到方法initialize() 中并返回

    【讨论】:

    • 嗨,我的想法是我希望 firebase.firestore() 和 firebase.auth() 只运行一次,而不是每次我想使用它时都调用它。我无法从 initialize() 导出 firebase.initializeApp(data),因为导出语句不能在函数或回调中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    相关资源
    最近更新 更多