Ошибка генератора redux-saga внутри обратного вызова

Я пытаюсь настроить избыточную регистрацию и поток аутентификации через 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 |  });

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

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
          }
        });
    }
}

РЕДАКТИРОВАТЬ: изначально я думал, что это было вызвано if/else, но обратный вызов, кажется, настоящий виновник


person Tim Lindsey    schedule 12.09.2016    source источник


Ответы (1)


вы должны использовать 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});
}
person Kokovin Vladislav    schedule 12.09.2016