Как я могу использовать переменную одной функции высшего порядка в одной функции генерации? - PullRequest
0 голосов
/ 28 декабря 2018

Требуется использовать email = user.email в newcomment['comments/'+id] = {id,comment,email,date}, но я не могу использовать email = yield user.email или yield auth.onAuthStateChanged(user => {email = user.email}), а электронная почта приписывается нулю в newcomment.Как я могу это сделать?

export function* createComments(action){  
let email = null
try{
    auth.onAuthStateChanged(user => {
       email =  user.email
    })
    const id = yield database.ref().child("comments").push().key
    let date = new Date()
    date = yield date.getDate()+"/"+(date.getMonth()+1)+"/"+date.getFullYear()
    const newcomment = {}
    const comment = action.comment
    newcomment['comments/'+id] = {
        id,
        comment,
        email,
        date
    }
    database.ref().update(newcomment)
    yield put(ActionCreator.createCommentsSuccess(newcomment))
}catch({message}){
    yield put(ActionCreator.createCommentsFailure(message))
}

}

1 Ответ

0 голосов
/ 28 декабря 2018

Если вас интересует только первый раз, когда обратный вызов onAuthStateChanged вызывается пользователем, вы можете просто преобразовать его в Обещание:

const user = yield new Promise(resolve => {
  const unsub = auth.onAuthStateChanged(user => {
    if (user) {
      resolve(user);
      unsub();
    }
  });
});
...