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);
});
});
}