2016-11-28 19 views
0

AsyncStorageからのユーザ設定の優先順位に応じて、2つのFirebase環境のいずれかを初期化する必要があります。私はFirebaseデータベースを設定するために使用しているjavascriptファイルからスニペットを持っていますが、明確にわかるように、待っている呼び出しで構文エラーが発生します。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を初めて使っています。ソースファイルは既に存在しており、2つのデータベースのいずれかを指すように変更しようとしています。あなたの質問に答えるために、私はなぜ元の作成者がそれをしたのかわかりません。 – twoputt

答えて

0

私が理解することは、あなたがしたい、正しい場合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' 
} 
+0

これを調べる時間をとってくれてありがとう。上記のソースはinitializeFirebaseをエクスポートしているようです。実際、コードベースはfirebaseまたはdbをエクスポートすることを期待しています。 initializeFirebase関数をエクスポートしないと、firebaseまたはdbのすべての使用がリファクタリングされる必要がありますか? – twoputt

+0

はい、使用しているすべての場所を変更する必要があります。しかし、 'initializeFirebase'は非同期アクションなので、この変更を行うと、データベースが使用される前に初期化されます。 –

+0

ちょっと遊んでいるので、私はあなたの提案の精神の中でコードベースで何をする必要があるのか​​理解しています。あなたのソリューションを作品にしてください! – twoputt

関連する問題