使用fromPromise(rxjs5.5)时如何处理承诺拒绝

时间:2018-07-26 00:08:46

标签: rxjs rxjs5 redux-observable

在编写可观察到的Redux之后的史诗时,我找不到处理承诺拒绝的方法。如何处理getDataFromPromise拒绝?我试过管道,catch,catchError等。

(action$, store) =>
  action$
    .ofType(request().type)
    .mergeMap(action =>
      fromPromise(getDataFromPromise(action.payload)).map(data =>
        success(data)
      )
    )

以下应该按照this示例进行,但并非如此。

(action$, store) =>
   action$.ofType(request().type).mergeMap(action =>
     fromPromise(getDataFromPromise(action.payload))
       .pipe(catchError(error => of(failure(error))))
       .map(data => success(data))
   )

1 个答案:

答案 0 :(得分:3)

如果您使用的是RxJS v6,则没有这种“ fromPromise”可观察的创建。请参阅此帖子,并由Ben Lesh回答: https://github.com/ReactiveX/rxjs/issues/3525

相反,您应该使用'from'创建可观察对象。

此外,我建议快速浏览一下redux-observable文档的示例,该示例阐明了使用'ajax'助手来处理catchError运算符的promise的可观察错误: https://redux-observable.js.org/docs/recipes/ErrorHandling.html?_sm_au_=isVnQCj8r4v4Z08F

import { ajax } from 'rxjs/ajax';

const fetchUserEpic = action$ => action$.pipe(
  ofType(FETCH_USER),
  mergeMap(action => ajax.getJSON(`/api/users/${action.payload}`).pipe(
    map(response => fetchUserFulfilled(response))
    catchError(error => of({
      type: FETCH_USER_REJECTED,
      payload: error.xhr.response,
      error: true
    }))
  ))
);

因此,更容易修复代码的方法可能只是遵循此方法,并使用“ ajax”包装您的getDataFromPromise函数。