1

Я пытаюсь настроить регистрацию редукции и поток auth через firebase, используя промежуточное программное обеспечение sagas. Тем не менее я получаю:Выход генератора редукции-саги, не соответствующий внутреннему обратному вызову

Module build failed: SyntaxError: Unexpected token (16:3) 

    14 | registerUser(action.creds).then(response => { 
    15 |  if(response.payload.errorCode) 
> 16 |   yield put({type: 'REGISTRATION_FAILED', message: {msg_type: 'error', msg_body: response.payload.errorMessage}}) 
    |  ^
    17 |  else 
    18 |   yield put({type: 'REGISTRATION_SUCCESSFUL', user: response}) 
    19 | }); 

немного общего, но перемещение этой строки кода вокруг, кажется, что выход конкретно не нравится быть в функции обратного вызова. Однако я не вижу, чтобы это было категорически запрещено. Есть ли лучший способ сделать это? Вот генератор саги.

export function* registerUserSaga(action){ 
    console.log('registerUser called') 
    console.log(action) 

    registerUser(action.creds).then(response => { 
     if(response.payload.errorCode) 
      yield put({type: 'REGISTRATION_FAILED', message: {msg_type: 'error', msg_body: response.payload.errorMessage}}) 
     else 
      yield put({type: 'REGISTRATION_SUCCESSFUL', user: response}) 
    }); 
} 

и вот firebase регистрация функция:

export default FireBaseTools = { 
    registerUser: (creds) => { 
     return firebaseAuth.createUserWithEmailAndPassword(creds.email, creds.password).then(user => { 
      return user; 
     }).catch(error => { 
      return { 
      errorCode: error.code, 
      errorMessage: error.message 
      } 
     }); 
    } 
} 

EDIT: изначально я думал, что это было причиной самого если/другое, но обратный вызов, кажется реальным виновник

ответ

0

вам должен использовать Promise из функции registerUser;

что-то подобное:

registerUser: creds => { 
    return firebaseAuth.createUserWithEmailAndPassword(creds.email, creds.password) 
    .then(user => ({user})) 
    .catch(error => ({error})) 
} 

export function* registerUserSaga(action){ 

    const {error, user} = yield call(registerUser,action.creds); 
    error 
    ? yield put({type: 'REGISTRATION_FAILED', 
       message: {msg_type: 'error', msg_body: error.message}}) 

    : yield put({type: 'REGISTRATION_SUCCESSFUL', user}); 
}