我正在使用提供承诺的第三方库,但是我需要将其包装到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)
})
})
);
地图不是函数。
答案 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}}函数返回某些信息,而现在情况并非如此。