Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Asynchronous programming you must... Use the fl...

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for gdljs gdljs
September 29, 2015

Asynchronous programming you must... Use the flow, luke by @azendal

Slides de la quinta sesión de GDLJS del 29 de Septiembre.

Veremos las diferentes estrategias para programación asíncrona: Callbacks, node-style callbacks, promises, iterators, generators; exploraremos algunas posibilidades futuras como async y await, y veremos como estos patrones se aplican en flujos complejos de programación asíncrona. Finalmente veremos como usé Fluorine para resolver un flujo complejo que incluye paralelismo y asincronicidad.

Avatar for gdljs

gdljs

September 29, 2015
Tweet

More Decks by gdljs

Other Decks in Technology

Transcript

  1. Problema Cargar datos de varias APIS y procesar en la

    mejor secuencia posible para ganar velocidad.
  2. Los buenos tiempos cargar A cargar B cargar C cargar

    D procesar A+B procesar B+C+D ya merito ok ya :)
  3. jQuery/AJAX $.load(‘A’, function () {}); $.load(‘B’, function () {}); $.load(‘C’,

    function () {}); $.load(‘D’, function () {}); process1(); process2(); ya_mero(); ya();
  4. jQuery/AJAX async $.load(‘A’, function () { $.load(‘B’, function () {

    $.load(‘C’, function () { $.load(‘D’, function () { process1(); process2(); ya_mero(); ya(); }); }); }); });
  5. Promises $.load(‘A’).then(function() { return $.load(‘B’, function () {}); }).then(function() {

    return $.load(‘C’, function () {}); }).then(function() { return $.load(‘D’, function () {}); }).then(function() { process1(); process2(); ya_mero(); ya(); });
  6. Flow Based Programming Declara el flujo, no el programa Paralelismo

    Asincronicidad modularidad Menor carga mental
  7. Fluorine https://github.com/freshout-dev/fluorine var flow = new Flow({name : ‘demo’}); flow.step().dependsOn()(function

    (step) {}); flow.step(‘process1’).dependsOn(‘fetch_a’, ‘fetch_b’)(function (step) { step.success() }); flow.step(‘process2’).dependsOn(‘fetch_b’, ‘fetch_c’)(function (step) { step.success() }); flow.step(‘fetch_a’).dependsOn()(function (step) { step.success() }); flow.step(‘fetch_b’).dependsOn()(function (step) { step.success() }); flow.step(‘fetch_c’).dependsOn()(function (step) { step.success() });