2016-09-18 29 views
2

我正在使用firebase處理我的應用程序中的身份驗證。 Firebase有一個監聽程序,可隨時在身份驗證狀態更改時執行回調。我在firebase的utils文件中有:設置變量返回回調監聽器

export default { 
    ... 

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

    ... 
} 

當用戶登錄/退出回調執行。我試圖用redux-saga來處理這個觀察者,每當firebase告訴我狀態發生變化時,就會向我的reducer發送一個事件。我遇到的問題是我無法確定如何監視該觀察者的動態返回值。現在我這樣做:

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條件語句工作(只是登錄時狀態更改爲控制檯),但我得到一個錯誤,如果我嘗試使用收益。這是一個錯誤,或者我違反了我不清楚的規則。任何其他方式來設置?從最佳實踐角度來看,這似乎真的需要由redux-sagas處理。

+0

你想出了一個解決方案? – Lee

回答

0

您只能在生成器函數中使用yield。與變量和函數不同,yield在您的回調函數所在的嵌套函數中不可用。

您可以通過正常派遣來調度行動。