fromPromise не существует для типа Observable

В Angular 2, используя rxjs, я пытался преобразовать Promise в Observable. Как показали многие онлайн-руководства, я использовал fromPromise на Observable, Который выдает ошибку:

Property 'fromPromise' does not exist on type 'typeof Observable'.

Наблюдаемый был импортирован как:

import { Observable } from "rxjs/Observable";

пытается импортировать fromPromise как и другие операторы приводит к ошибке:

import 'rxjs/add/operator/fromPromise';

даже если я подавлю ошибку машинописного текста, это все равно приведет к ошибке:

(<any>Observable).fromPromise

Ошибка:

Uncaught (in promise): TypeError: __WEBPACK_IMPORTED_MODULE_3_rxjs_Observable__.Observable.fromPromise is not a function

Несколько похожая проблема была сообщена в репозитории rxjs здесь, но там также нет решения.

1 ответ

Решение

ОБНОВИТЬ:

По состоянию на rxjs 6.0.0-бета.3, операторы и наблюдаемые создатели должны быть импортированы из rxjs, Более того, fromPromise больше не является частью общедоступного API, и его from метод.

TL; DR;

ОБНОВИТЬ

Для rxjs 6.0.0 используйте:

import { from } from 'rxjs';

var observableFromPromise =  from(promiseSrc);

ОБНОВИТЬ:

После выхода на конвейер операторов в rxjs 5.5.x, подход с обезьяньим патчем настоятельно не рекомендуется. Попробуйте использовать опцию статического метода.

Оригинальный ответ

По состоянию на rxjs 5.4.x, fromPromise может использоваться как статический метод или может быть исправлен в Observable прототип.

Для первого вы можете сделать следующее:

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

var observableFromPromise = fromPromise(promiseSrc);

Подробнее об этом подходе здесь

Чтобы сделать второе, вам нужно изменить оператор импорта:

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

var observableFromPromise = Observable.fromPromise(promiseSrc);

Подробнее об этом подходе здесь

Лично я бы порекомендовал первый, учитывая, что 2-й подход в основном 1-й, с той разницей, что Observable прототип изменен.

Как то, что сказала Джота "от" - это ответ.

Вы можете найти ссылку здесь

https://www.learnrxjs.io/operators/creation/from.html

Однако, если вы хотите указать "Promise to Observable", вы можете использовать "fromPromise", как показано ниже.

  import { from as fromPromise, Observable} from 'rxjs';
  ...

  private getObservable(): Observable<any> {
    return fromPromise(this.promise);
  }


  private getPromise() {

   this.promise = new Promise((resolve, reject) => {
      this.service.getPromise()
        .then(response => {
          //  do sth
          resolve(response);
        });
    });
}
Другие вопросы по тегам