在ngrx效果中将承诺转化为可观察的

时间:2018-09-25 17:03:03

标签: angular redux promise ngrx

我正在使用提供承诺的第三方库,但是我需要将其包装到ngrx效果的Observable中。 这个想法是在成功初始化应用程序后调度新动作。 但是当诺言解决后,我需要调度数据。

classOne.promise().then(result =>
  nested.OnemorePromise(result).then(result2 =>
    //(result2) dispatch new action here (result2)
  )
);

我创建了这样的东西:

@Effect()
  initializeValue$: Observable<Action> = this.actions$.pipe(
    ofAction(AppInitializeAction),
    map(action => {
      classOne.promise().then(result =>
      nested.OnemorePromise(result).then(result2 =>
         this.store.dispatch(new Action(result2))
// ideally just - return new Action(result2)
      )
    );
    })
它给我错误-效果是调度错误的动作。

更新:

 @Effect()
  initializeValue$: Observable<Action> = this.actions$.pipe(
    ofAction(AppInitializeAction),
    map(action => {
      return from(classOne.promise()).map(result => {
         console.log(result)
        })
    })
  );

地图不是函数。

2 个答案:

答案 0 :(得分:2)

您可以在 Rxjs> = 6 中使用from

import { from } from 'rxjs';

map(action => {
  from(classOne.promise()).map(result ...
Rxjs <= 5 中的

fromPromise

import { fromPromise } from 'rxjs/observable/fromPromise';

map(action => {
  fromPromise(classOne.promise()).map(result ...

答案 1 :(得分:1)

这里的问题是您没有返回store.dispatch,而是手动调用from(promise)(就像您的评论所说的那样)。

要解决此问题,请使用.promise().then(...)而不是map

还要确保{{1}}函数返回某些信息,而现在情况并非如此。