Skip to content

Instantly share code, notes, and snippets.

@getify
Last active August 29, 2015 13:58
Show Gist options
  • Select an option

  • Save getify/10172207 to your computer and use it in GitHub Desktop.

Select an option

Save getify/10172207 to your computer and use it in GitHub Desktop.

Revisions

  1. getify revised this gist Jun 15, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -50,5 +50,5 @@ ASQ( 2, 3 )
    }
    )
    .val( function(msgs){
    console.log( msg[0], msgs[1] ); // 140 "Hello World"
    console.log( msgs[0], msgs[1] ); // 140 "Hello World"
    } );
  2. getify revised this gist May 28, 2014. 1 changed file with 49 additions and 33 deletions.
    82 changes: 49 additions & 33 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -1,38 +1,54 @@
    // async promise wrap of value `x`
    function Pr(x) {
    return new Promise(function(resolve){
    setTimeout(function(){ resolve(x); },1000);
    });
    // just a silly number generator that's promise-async
    function getVal() {
    return new Promise( function(resolve,reject){
    setTimeout( function(){
    if (!getVal.__number) getVal.__number = 0;
    resolve( getVal.__number += 10 );
    }, 100 );
    } );
    }

    // **********************

    // seed `2` as initial sequence message, which will pass into
    // first `runner` segment
    ASQ(2)
    ASQ( 2, 3 )
    .runner(
    // v1 will be set as `2` here
    function*(v1) {
    console.log("initial v1:" + v1); // initial v1:2
    v1 += yield null;
    console.log("now v1:" + v1); // now v1:12
    v1 += yield Pr(v1 * 2);
    console.log("finally v1:" + v1); // finally v1:84
    yield Pr(v1 + 1);
    },
    function*() {
    var v2 = yield Pr(10);
    console.log("initial v2:" + v2); // initial v2:24
    v2 += yield Pr(v2 * 3);
    console.log("finally v2:" + v2); // finally v2:109
    yield Pr(v2 + 6);
    }
    // machine 1
    function*(token){
    token.messages; // [2, 3]

    token.messages[0] += yield getVal(); // pauses generator while promise resolves
    token.messages[1] += yield getVal(); // pauses generator while promise resolves
    token.messages.push( token.messages[0] + token.messages[1] );

    token.messages; // [12, 23, 35]

    yield token; // hand control over to next machine

    token.messages; // [ 100 ]

    token.messages[0] += yield getVal(); // pauses generator while promise resolves

    // implicit finish means transfer control to next machine
    },
    // machine 2
    function*(token){
    token.messages; // [12, 23, 35]

    token.messages = [ token.messages[0] + token.messages[1] + token.messages[2] ];
    token.messages; // [ 70 ]

    token.messages[0] += yield getVal(); // pauses generator while promise resolves
    token.messages; // [ 100 ]

    yield token; // hand control over to next machine

    token.messages; // [ 140 ]

    token.messages.push( "Hello World" );

    yield token.messages;
    }
    )
    .val(function(msg){
    console.log("Result: " + msg);
    });
    // initial v1:2
    // now v1:12
    // initial v2:24
    // finally v1:84
    // finally v2:109
    // Result: 115
    .val( function(msgs){
    console.log( msg[0], msgs[1] ); // 140 "Hello World"
    } );
  3. getify revised this gist Apr 9, 2014. No changes.
  4. getify revised this gist Apr 8, 2014. 1 changed file with 9 additions and 9 deletions.
    18 changes: 9 additions & 9 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -13,18 +13,18 @@ ASQ(2)
    // v1 will be set as `2` here
    function*(v1) {
    console.log("initial v1:" + v1); // initial v1:2
    v1 = v1 + (yield null);
    v1 += yield null;
    console.log("now v1:" + v1); // now v1:12
    v1 = yield Pr(v1 * 2);
    console.log("finally v1:" + v1); // finally v1:72
    v1 += yield Pr(v1 * 2);
    console.log("finally v1:" + v1); // finally v1:84
    yield Pr(v1 + 1);
    },
    function*() {
    var v2 = yield Pr(10);
    console.log("initial v2:" + v2); // initial v2:24
    v2 = yield Pr(v2 * 3);
    console.log("finally v2:" + v2); // finally v2:73
    yield Pr(v2 + 7);
    v2 += yield Pr(v2 * 3);
    console.log("finally v2:" + v2); // finally v2:109
    yield Pr(v2 + 6);
    }
    )
    .val(function(msg){
    @@ -33,6 +33,6 @@ ASQ(2)
    // initial v1:2
    // now v1:12
    // initial v2:24
    // finally v1:72
    // finally v2:73
    // Result: 80
    // finally v1:84
    // finally v2:109
    // Result: 115
  5. getify created this gist Apr 8, 2014.
    38 changes: 38 additions & 0 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,38 @@
    // async promise wrap of value `x`
    function Pr(x) {
    return new Promise(function(resolve){
    setTimeout(function(){ resolve(x); },1000);
    });
    }


    // seed `2` as initial sequence message, which will pass into
    // first `runner` segment
    ASQ(2)
    .runner(
    // v1 will be set as `2` here
    function*(v1) {
    console.log("initial v1:" + v1); // initial v1:2
    v1 = v1 + (yield null);
    console.log("now v1:" + v1); // now v1:12
    v1 = yield Pr(v1 * 2);
    console.log("finally v1:" + v1); // finally v1:72
    yield Pr(v1 + 1);
    },
    function*() {
    var v2 = yield Pr(10);
    console.log("initial v2:" + v2); // initial v2:24
    v2 = yield Pr(v2 * 3);
    console.log("finally v2:" + v2); // finally v2:73
    yield Pr(v2 + 7);
    }
    )
    .val(function(msg){
    console.log("Result: " + msg);
    });
    // initial v1:2
    // now v1:12
    // initial v2:24
    // finally v1:72
    // finally v2:73
    // Result: 80