"Eventi non criticati" in Programmazione reattiva

3

Il presupposto è che tu abbia uno Stream - una fonte di eventi che si sviluppa nel tempo.

È possibile connettersi a Stream e creare una catena logica che si attiva quando viene emesso un nuovo evento:

var button = document.querySelector('#button');
var clickStream = Rx.Observable.fromEvent(button, 'click');

clickStream
    .map(...)
    .subscribe(...)

Definisci un potenziale cambiamento nel tuo sistema e connetti ad esso una catena di reazione.

Quello che sto cercando di inserire in questo paradigma relativamente semplice è caricamento iniziale dei dati (o qualsiasi altra catena logica "non codificata") - dove si desidera caricare alcuni dati iniziali "in anticipo", al momento della creazione del componente corrispondente, forse.

Mi sembra che, almeno in Rx, il paradigma sia qualcosa di simile a:

var source = Rx.Observable.just(somePerhapsAsyncDataSource);    
var subscription = source.subscribe(...);

Quindi, per quanto posso dire, è un "osservabile immediatamente invocato" (all'interno dei vincoli del ciclo di eventi, naturalmente), che si sente un po 'forzato .

Questo è il paradigma comunemente accettato per il caricamento "non forzato" / iniziale dei dati o qualsiasi altra attività?

Altre soluzioni implicano abomini come osservabili sintetici (in cui si ha una proprietà shouldLoadData su alcuni EventEmitter o simili, con la catena di carico allegata e imposta a true quando viene creato il componente). Awful.

    
posta ZenMaster 03.12.2015 - 23:53
fonte

1 risposta

1

Dichiarazione di non responsabilità: sono un noob rx / FRP e la mia risposta deriva dal consumare la conoscenza rx molto più della produzione di soluzioni rx. Dal momento che questa domanda ha meno di un flusso di risposte, allora inserirò in:)

Risposta rapida: sì, da quello che ho capito, "kickstart" una sequenza avendo il valore rx iniziale essere il risultato di una sottoscrizione è un modello, e le "osservabili fredde" di rx supportano questo caso.

Branche più lunghe:

Vengo da uno sfondo di Java / server SE, ma di recente ho lavorato con RxSwift su iOS. Penso di vedere cosa intendi per "forzato" - se mi permetti di parafrasare, stai pensando "hey voglio rx per i flussi puri e perché un flusso puro dovrebbe essere macchiato dal kickstart di un blocco sulla sottoscrizione iniziale? "

Nel codice di produzione del mio gruppo iOS, vedo la programmazione di rete utilizzando Observable<T> per fornire risposte .Next(T) . Più in particolare, vedo i client che eseguono il bootstrading della 0a chiamata net-blocking per ottenere il loro primo .Next(T) , ecc. Benché questo sembri "forzato" dalla vista del server (osservabile-emettitore), la flipideide-view ha senso per me, astrattamente - come cliente, voglio T e non devo / non mi preoccupo di eseguire il marshalling delle risorse per ottenere il mio primo T . Come cliente, presumo una scala:)

Questo "flusso reattivo in Rx" YT mi ha aiutato con i concetti. Specifico per la tua domanda:

  • link [osservabile: più e amp; async]
  • link [freddo, per il blocco dell'accesso, ad esempio il filesystem]

pull quotes:

  • "i future sono un modo piuttosto efficace di gestire singole risposte".
  • "puoi sempre gestire un singolo valore se sei capace di gestire più valori" (ovvio ma vero)

Per quanto riguarda shouldLoadData hoop-jumping sì, ho appena visto alcuni codici di produzione ieri che l'hanno fatto. Sicuramente sembra sbagliato, ma hey - eccoci qui:)

Buona fortuna.

    
risposta data 09.01.2016 - 07:45
fonte

Leggi altre domande sui tag