estensione reattiva per Javascript (rxjs) mappa errore tipo di ritorno per dattiloscritto

seguendo questo stackBlitz, ho cercato di emettere una serie di N numeri, ritardando ogni emissione con un tempo di ritardo che è in funzione del numero stesso. ecco il codice

var subscription = Observable.from(Array.apply(null, {length:N}).map(Number.call, Number))
.pipe(map((iteration) => {
  return timer(iteration)
    .pipe(map(()=>iteration))
}))
.pipe(concatAll())
.subscribe((mappedIteration)=>{
    console.log(Number(mappedIteration)); // prints 0, 1, 2 ... 
})

la variabile mappedIteration è di tipo Observable & lt; {} >. le mie domande sono:

1) perché il cast Number(mappedIteration) funziona su un tipo Observable & lt; {} > e stampa con successo i numeri 0,1,2,?

2) perché, dare il comportamento in 1), mappedIteration non è di tipo number, come accade nell’esempio stackblitz?

3) C’è un metodo più semplice per ‘mappare’ una fonte di valori in un Osservabile di tipo arbitrario (come un timer, in questo caso)?

EN From: Reactive extension for Javascript (rxjs) map mismatch return type for Typescript

More similar articles:

2 Comments

  1. c’è molto in corso qui, in particolare un sacco di apply e call uso, e quelli di solito fangoso le acque del tipo di sistema di dattiloscritto (soprattutto perché le loro versioni digitate sono stati aggiunti solo in TS 3.2, che è stato rilasciato questa settimana)

    per la tua terza domanda,

    3) is there a more straightforward method to ‘map’ a source of values into an Observable of arbitrary type (like a timer, in this case)?

    sì, sarebbe quello di utilizzare l’operatore switchMap; Tuttavia, switchMap “passare” la fonte osservabile in una nuova per ogni emissione, scartando i valori precedenti. nel vostro esempio specifico si potrebbe essere più interessati all’operatore concatMap: vi permetterà di creare nuovi osservabili in base alle emissioni di origine, seguendo l’ordine del precedente osservabile. così i seguenti osservabili inizieranno solo quando i precedenti hanno completato.

    infine, l’operatore mergeMap consente di “avviare” i vostri osservabili e lasciarli funzionare anche se quelli precedenti non erano ancora completato, in modo tale che corrono in parallelo. ho creato uno stackblitz dove si possono provare, in modo simile a quello che hai collegato.

    vi consiglio di leggere questo post sul blog che spiega come questi operatori (e altri) funziona con belle animazioni.

    1. usando concatMap posso risolvere il problema 2) e con successo mappare una fonte di numero in una fonte di numeri la cui emissione è ritardata nel tempo a seconda del loro valore.

Leave a Reply

Your email address will not be published. Required fields are marked *