Конвертировать Обещание в Наблюдаемый в ngrx Эффекте - PullRequest
0 голосов
/ 25 сентября 2018

Я использую стороннюю библиотеку, которая дает обещания, но мне нужно обернуть ее в Observable в эффекте ngrx.Идея состоит в том, чтобы отправить новое действие, когда приложение успешно инициализировано.Но мне нужно отправить данные, когда обещание будет выполнено.

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)
      )
    );
    })
Это дает мне ошибку - эффект - отправка неправильного действия.

upd:

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

карта не является функцией.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы можете использовать from в Rxjs> = 6 :

import { from } from 'rxjs';

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

fromPromise в Rxjs <= 5 </strong>:

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

map(action => {
  fromPromise(classOne.promise()).map(result ...
0 голосов
/ 25 сентября 2018

Проблема здесь в том, что вы не возвращаете Action, но вы звоните store.dispatch вручную (точно так же, как ваш комментарий).

Чтобы это исправить, используйте from(promise)вместо .promise().then(...).

Также убедитесь, что функция map возвращает что-то, чего сейчас нет.

...