2016-11-28 114 views
0

根據來自AsyncStorage的用戶設置首選項,我需要初始化兩個Firebase環境中的一個。我從我用來設置Firebase數據庫的JavaScript文件中選擇了一小段代碼,但是您可以清楚地看到它會在await調用時給我一個語法錯誤。React Native在導出之前等待AsyncStorage

導出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; 
+0

你爲什麼出口呢? 'export default firebase;' –

+0

@ free-soul,感謝評論。完全披露我是React-Native和Firebase的新手。源文件是預先存在的,我試圖修改它指向兩個數據庫中的任何一個。所以要回答你的問題,我不知道爲什麼最初的創作者這樣做。 – twoputt

回答

0

如果我的理解是正確的,你想要的是初始化火力點,然後創建一個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' 
} 
+0

非常感謝您抽出寶貴時間來研究這一點。在我看來,上面顯示的源出口initializeFirebase。事實上,代碼庫需要導出firebase或db。不導出initializeFirebase函數意味着firebase或db的所有用法都需要重構? – twoputt

+0

是的,我們需要修改他們正在使用的所有地方。但是由於'initializeFirebase'是一個異步動作,所以進行這種修改可以確保數據庫在使用之前被初始化。 –

+0

因此,我想了解我的建議精神,在代碼庫中需要做些什麼。將您的解決方案標記爲作品! – twoputt

相關問題