Requisiti: Il progetto deve convertire gli Observables in Promises e attendere il completamento, e quando si utilizza il metodo toPromise() in un progetto Angular, l'hint è stato deprecato, e quindi si raccomanda di utilizzare i metodi statici firstValueFrom o lastValueFrom.
Perché deprecare il metodo toPromise()?
Poiché il nome del metodo toPromise() non indica mai quale valore emesso la Promessa risolverà, poiché gli Observables possono produrre valori multipli nel tempo. Quando si converte in una Promessa, si può voler scegliere se selezionare il primo valore ad arrivare o l'ultimo valore. Per risolvere tutti questi problemi, abbiamo deciso di deprecare toPromise() e introdurre due nuove funzioni helper per convertire in promises.
Semplicemente capireGli osservabili producono valori multipliE poiLe promesse porteranno a un solo valorePoi, alcuni utenti vogliono usare il primo valore, altri vogliono usare l'ultimo valore, quindi appaiono firstValueFrom e lastValueFrom. (Nota: toPromise() è l'ultimo valore per ottenere gli osservabili)
esempio firstValueFrom
Potresti voler ottenere il primo valore quando arriva senza aspettare che l'Observable si completi, così puoi usare firstValueFrom. firstValueFrom risolverà la Promessa con il primo valore emesso dall'Osservabile e cancellerà immediatamente l'iscrizione per preservare la risorsa. Se l'Observable si completa senza emettere alcun valore, anche il firstValueFrom verrà rifiutato con un VuotoErrore.
esempio: lastValueFrom
lastValueFrom è quasi identico a toPromise(), il che significa che parsi con l'ultimo valore raggiunto quando l'Observable si completa, ma si comporta diversamente quando l'Observable si completa senza emettere un solo valore. Quando l'Observable si completa senza essere attivato, toPromise() risolverà con successo in undefined (quindi il tipo di ritorno cambia), e lastValueFrom verrà rifiutato come EmptyError. Pertanto, il tipo di ritorno di lastValueFrom è Promise<T>, proprio come toPromise() in RxJS 6.
Esempio di analisi
In RxJS, intervallo(1000) genera un osservabile che emette una sequenza incrementale di numeri ogni 1000 millisecondi (cioè 1 secondo), a partire da 0.
Successivamente, .pipe(take(10)) è una catena di operatori che limita il numero di elementi che l'Observable emette. Qui, take(10) significa che vengono presi solo i valori dei primi 10 emisi.
Spieghiamo questa espressione in dettaglio:
intervallo(1000): Creare un osservabile che emette un numero ogni 1 secondo. La sequenza numerica inizia da 0 e aumenta di 1 ogni volta.
.pipe(take(10)): Usa il metodo .pipe() per collegare più operatori. Qui usiamo l'operatore take(10), che limita l'Osservabile a emettere solo i primi 10 valori.
Testare gli errori EmptyError
Il codice è il seguente:
o
Riferimento:Il login del link ipertestuale è visibile. |