1 Doğrudan Yürütme / Dönüştürme
from
Önceden oluşturulmuş bir sözü doğrudan gözlemlenebilir hale dönüştürmek için kullanın .
import { from } from 'rxjs';
// getPromise() will only be called once
const observable$ = from(getPromise());
observable$
abonelere vaat edilen değeri etkili bir şekilde tekrar eden sıcak bir gözlemlenebilir olacaktır .
Vaat edilen kuruluş yürütülür veya gözlemlenebilir durum yaratıldığında zaten çözülmüştür. Eğer iç vaat çözülmüşse, gözlemlenebilir kişiye yeni bir abone derhal değerini alacaktır.
Her Abonelikte 2 Ertelenmiş Yürütme
Kullan defer
bir gözlemlenebilir bir söz oluşturulmasını ve dönüşüm erteleme girdi olarak bir söz fabrika fonksiyonu ile.
import { defer } from 'rxjs';
// getPromise() will be called every time someone subscribes to the observable$
const observable$ = defer(() => getPromise());
observable$
Bir olacaktır soğuk gözlemlenebilir .
Farkı from
yani defer
bir abone için bekler ve ancak o zaman verilen söz fabrika işlevini çağırarak yeni bir söz yaratır. Bu, gözlemlenebilir bir oluşturmak istediğinizde, ancak iç vaatlerin hemen yerine getirilmesini istemediğinizde kullanışlıdır. İç vaat ancak biri gözlenebilir olana abone olduğunda yürütülür. Her abone kendi yeni gözlemlenebilirliğini alacaktır.
3 Birçok Operatör Doğrudan Verilen Sözleri Kabul Ediyor
Birleştirmek çoğu RxJS operatörleri (örneğin merge
, concat
, forkJoin
, combineLatest
...) ya da (örn gözlenebilirleri dönüşümü switchMap
, mergeMap
, concatMap
, catchError
...) doğrudan sözlerini kabul edin. Zaten bunlardan birini kullanıyorsanız from
, önce bir söz vermek için kullanmanız gerekmez (ancak soğuk bir gözlemlenebilir oluşturmak için yine de kullanmanız gerekebilir defer
).
// Execute two promises simultaneously
forkJoin(getPromise(1), getPromise(2)).pipe(
switchMap(([v1, v2]) => v1.getPromise(v2)) // map to nested Promise
)
Kontrol belgeleri veya uygulama kullandığınız operatör kabul görmek için ObservableInput
ya SubscribableOrPromise
.
type ObservableInput<T> = SubscribableOrPromise<T> | ArrayLike<T> | Iterable<T>;
// Note the PromiseLike ----------------------------------------------------v
type SubscribableOrPromise<T> = Subscribable<T> | Subscribable<never> | PromiseLike<T> | InteropObservable<T>;
Bir örnek arasındaki from
ve defer
bir örnek arasındaki fark : https://stackblitz.com/edit/rxjs-6rb7vf
const getPromise = val => new Promise(resolve => {
console.log('Promise created for', val);
setTimeout(() => resolve(`Promise Resolved: ${val}`), 5000);
});
// the execution of getPromise('FROM') starts here, when you create the promise inside from
const fromPromise$ = from(getPromise('FROM'));
const deferPromise$ = defer(() => getPromise('DEFER'));
fromPromise$.subscribe(console.log);
// the execution of getPromise('DEFER') starts here, when you subscribe to deferPromise$
deferPromise$.subscribe(console.log);
from
yöntem gözlemlenebilir döndürür ancak aboneliklere değer vaat ediyor. :(