El “póster secundario” de FRP en la programación web parece completarse automáticamente:
http://jsfiddle.net/36b20tkp/
var $input = $('#textInput'), $results = $('#results'); // Only get the value from each key up var keyups = Rx.Observable.fromEvent($input, 'keyup') .map(function (e) { return e.target.value; }) .filter(function (text) { return text.length > 2; }); // Now debounce the input for 500ms var debounced = keyups.debounce(500 /* ms */ ); // Now get only distinct values, so we eliminate the arrows and other control characters var distinct = debounced.distinctUntilChanged(); // Get suggestions, automatically cancelling old requests var suggestions = distinct.flatMapLatest(searchWikipedia); // Render suggestions.forEach( function (data) { $results.empty() .append($.map(data[1], function (value) { return $('').text(value); })); }, function (error) { $results.empty() .append($('
')) .text('Error:' + error); } );
El motivo es que muestra la orquestación de los eventos de la interfaz de usuario y las solicitudes asíncronas del servidor. Escuché que FRP también es bueno con la animación; Como probablemente pueda imaginar, los eventos de IU, las solicitudes asíncronas y la animación se utilizan ampliamente en los clientes de aplicaciones web. FRP también es útil en el lado del servidor, donde los flujos son conexiones de clientes con datos que provienen de ellos y se les envían en tiempo real.
- ¿Cómo externalizo la interfaz de usuario de una aplicación web dinámica?
- ¿Es difícil usar MySQL con Node.js y Angular.js?
- ¿Cuál es la diferencia entre desarrollo web y diseño web?
- ¿Cómo se implementa un proyecto django creado en PyCharm en Windows?
- ¿Qué es angular y polímero (desarrollo web)?
La principal diferencia entre el ejemplo anterior y cualquier solución simple que se te ocurra sin FRP es que:
- Será correcto: cancelará automáticamente las solicitudes antiguas que podrían haber viajado durante más tiempo, evitando el error donde una respuesta tardía podría reemplazar los resultados actuales (ya que el usuario ha seguido escribiendo y ya tiene una palabra más larga). La cancelación de la suscripción a eventos también es automática, por lo que no debe preocuparse por las pérdidas de memoria al olvidarse de cancelar la suscripción de los controladores de eventos (aunque este ejemplo no lo necesita).
- No afectará a su servidor: no enviará una solicitud por pulsación de tecla, pero esperará a que el usuario disminuya la velocidad. Esto se llama rebote: de EE, donde la pieza conductora de metal en un botón rebotará físicamente un poco antes de hacer contacto total.
- Aún será más fácil de entender que un montón de devoluciones de llamada, incluso si usa promesas. Aparentemente, FRP promete qué listas y matrices tienen valores escalares.
Aquí hay un video que habla sobre cómo se usa RxJS para la aplicación web de Netflix y Cortana de Microsoft: Bart De Smet, Jafar Hussain, Matthew Podwysocki: Pragmatic Rx (Canal 9)