Наблюдаемые отличаются от Обещаний тем, что они ничего не делают до subscribed
до.Вы можете связать конвейер преобразований в Observable, но оригинальная функция Observer
не будет работать до тех пор, пока не будет подписана оболочка Observable
.Они также отличаются от Обещаний тем, что функция Observer будет запускаться для каждой подписки на Observable.
Методы http
возвращают холодную, конечную Observable с одной эмиссией до их завершения.Здесь функция Observer - это сам вызов http.Проверьте ваши инструменты разработки, и вы обнаружите, что http-вызов не выполняется до тех пор, пока вы не подпишетесь на Observable.
Труба async
фактически subscribe
s к Observable под капотом и разворачивает ее выбросы как значенияТаким образом, использование трубы приведет к запуску Observable.Точно так же оператор toPromise
также подписывается на источник Observable
и преобразует его в Обещание, поэтому он работает как Обещание при немедленном запуске.
Канал async
обычно является рекомендуемым способом развертывания.Observable
s, но с конечным Observable
, например, запросом http, вы можете развернуть значение и удерживать его где-то вне шаблона:
private listEvents(user_id: string){
let url: string = `${environment.apiEndpoint}/event`;
let payload: any = { user_id };
this.http.post(url, payload)
.pipe(httpFetchRetry, httpFetchMap)
.subscribe(s => this.allEvents = s);
}
Хороший шаблон проектирования - это удерживать этозначение в службе для доступа нескольких компонентов.