【问题标题】:React Native await AsyncStorage before exportReact Native 在导出前等待 AsyncStorage
【发布时间】:2017-04-12 11:43:59
【问题描述】:

根据 AsyncStorage 的用户设置偏好,我需要初始化两个 Firebase 环境之一。我有来自用于设置 Firebase 数据库的 javascript 文件中的 sn-p,但正如您可以清楚地看到的那样,它会在 await 调用上给我一个语法错误。

导出 firebase 符号的最佳方式是什么,但只有在进行了适当的 initializeApp 调用之后?

谢谢,

红色


import firebase from 'firebase';
import { AsyncStorage } from 'react-native';
import { FIREBASE_CONFIG, FIREBASE_CONFIG_DEMO, DATA_ENVIRONMENT_STORAGE_KEY } from '../../../shared/env';


async function initializeFirebase()
{
    value = await AsyncStorage.getItem(DATA_ENVIRONMENT_STORAGE_KEY);
    if ((value == null) || (value == 'live'))
        firebase.initializeApp(FIREBASE_CONFIG);
    if (value == 'demo')
        firebase.initializeApp(FIREBASE_CONFIG_DEMO);
}
await initializeFirebase();

export var db = firebase.database();
export default firebase;

【问题讨论】:

  • 你为什么要导出这个? export default firebase;
  • @free-soul,感谢您的评论。完全公开我是 React-Native 和 Firebase 的新手。源文件是预先存在的,我正在尝试修改它以指向两个数据库中的任何一个。所以回答你的问题,我不知道原作者为什么要这么做。

标签: firebase react-native async-await export asyncstorage


【解决方案1】:

如果我的理解是正确的,你想要的是初始化 firebase,然后创建一个 db 引用并导出它。

试试这个:

initializeFirebase.js

import firebase from 'firebase';
import { AsyncStorage } from 'react-native';
import {
    FIREBASE_CONFIG,
    FIREBASE_CONFIG_DEMO,
    DATA_ENVIRONMENT_STORAGE_KEY
} from '../../../shared/env';

async function initializeFirebase() {
    const value = await AsyncStorage.getItem(DATA_ENVIRONMENT_STORAGE_KEY);

    let firebaseConfig = null;
    if ((value === null) || (value === 'live')) {
        firebaseConfig = FIREBASE_CONFIG;
    } else if (value === 'demo') {
        firebaseConfig = FIREBASE_CONFIG_DEMO;
    }

    if (firebaseConfig !== null) {
        await firebase.initializeApp(firebaseConfig);
        return firebase.database();
    }
}

export default initializeFirebase;

someOtherFile.js

import initializeFirebase from './initializeFirebase.js';

async someOtherFunction() {
    // ...    

    const database = await initializeFirebase();

    // ... do something with 'database'
}

【讨论】:

  • 非常感谢您花时间研究这个问题。在我看来,上面显示的源代码导出了 initializeFirebase。事实上,代码库希望导出 firebase 或 db。导出initializeFirebase函数不就意味着firebase或db的所有使用都需要重构吗?
  • 是的,我们需要修改它们正在使用的所有地方。但由于initializeFirebase 是一个异步操作,因此进行此修改可确保在使用数据库之前对其进行初始化。
  • 所以玩了一下,我明白按照您的建议,我需要在代码库中做些什么。将您的解决方案标记为有效!
猜你喜欢
  • 2016-09-16
  • 2019-03-21
  • 2021-03-26
  • 2019-07-02
  • 2019-11-03
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 2020-11-10
相关资源
最近更新 更多