Как вернуть Promise, используя Rxjs в React? - PullRequest
2 голосов
/ 20 июня 2019

Я изучаю RxJS / Redux-Observable в React.

Но у меня вопрос по поводу return Promise.

Без использования RxJS / Redux-Observable

, чтобы я мог вернуть обещание компоненту, чтобы он мог использовать .then() для следующего действия

В действии реакции

export const getData = () => (dispatch) => {
    try {
        const dataResponse = await dataAPI.getData();
        dispatch(getDataAction(dataResponse));
        return Promise.resolve(dataResponse);
    } catch (error) {
        return Promise.reject(error);
    }
}

В компоненте реакции

componentDidMount = () => {
    const {
        getData
    } = this.props;

    getData().then(function(response) {
        // I can use this response action for some UX Action.
    })
}

С использованием RxJS / Redux-Observable

Я не знаю, как вернуть обещание

В эпическом действии реакции

export const getDataEpic = (action$, state$) => {
    return action$.pipe(
        ofType(FETCH_DATA),
        mergeMap(action => {
            let _response = ajax.getJSON(dataAPI.getData());
            return _response.pipe(
                delay(3000),
                map(response => {
                    return fetchDataFulfilledAction(response);
                }),
                takeUntil(action$.pipe(
                    filter(
                        action => action.type === CANCEL_FETCH_DATA
                    )
                ))
            )
        })
    );
}

В компоненте реакции

componentDidMount = () => {
    const {
        getData
    } = this.props;

    getData().then(function(response) {
        // How to get this response result ?
    })
}

Я знаю, что использовать Reducer - один из способов справиться, но я все еще хочу знать, как вернуть обещание.

Спасибо, ребята

1 Ответ

0 голосов
/ 20 июня 2019

Таким образом, вы сделали классическую ошибку, когда мы возвращаем обещание, вы не должны возвращать новое обещание для успеха или ошибки, а возвращать две функции:

решите -> для успеха, соединяющего это с тогда Отклонить -> за провал цепочки с уловом!

Надеюсь, этот код поможет вам, скажите мне, если вам нужно разъяснение

export const getData = () => (dispatch) => new Promise((resolve, reject) => {
    const dataResponse = await dataAPI.getData();
    dispatch(getDataAction(dataResponse))

    if(dataResponse.status === '200') {
      return resolve(dataResponse) }
    else {
     return reject(dataResponse.error)
  }   
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...