2

アプリケーションで認証を処理するためにfirebaseを使用しています。Firebase には、認証ステータスが変化するたびにコールバックを実行するリスナーがあります。私はそれをfirebase utilsファイルに持っています:

export default {
    ...

    authChanged: (callback) =>{
        return firebaseAuth.onAuthStateChanged(callback);
    },

    ...
}

ユーザーがログイン/ログアウトすると、コールバックが実行されます。このオブザーバーを redux-saga で処理しようとしていて、firebase がステータスの変更を通知するたびにイベントをレデューサーに送信します。私が直面している問題は、そのオブザーバーの動的な戻り値を囲い込む方法を判断できないことです。今、私はこれをやっています:

export function* loginState(){
    Firebaseutils.authChanged(function(user){
        if(user){
            yield put({type: 'LOGGED_IN', user: {user.email, user.uid}})
        }else{
            yield put({type: 'LOGGED_OUT'})
        }
    });
}

if/else 条件が機能することを確認しました (ステータスが変更されたときにコンソールにログを記録するだけです) が、yield を使用しようとするとエラーが発生します。それはバグであるか、明確でないルールに違反しています。これを設定する他の方法はありますか?ベスト プラクティスの観点からは、これは redux-saga で処理する必要があるようです。

4

1 に答える 1

0

yieldジェネレーター関数内でのみ使用できます。また、変数や関数とは異なりyield、コールバック関数であるネストされた関数内では使用できません。

通常のディスパッチでアクションをディスパッチできます。

于 2016-09-18T06:03:55.677 に答える