Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf8">
<title>CSP-like Generator Coroutines (asynquence)</title>
</head>
<body>
<h1>CSP-like Generator Coroutines (asynquence)</h1>
<p>hint: look in the console</p>
<script src="https://rawnpm.getify.io/asynquence/latest/asq.js"></script>
<script src="https://rawnpm.getify.io/asynquence-contrib/latest/contrib.js"></script>
</body>
</html>
 
// noprotect
function multBy20(v) {
  // fake-delayed math
  return ASQ.after(500,v*20);
}
function addTo2(v) {
  // fake-delayed math
  return ASQ.after(500,v+2);
}
function *foo(token) {
    // grab message off the top of the channel
    var value = token.messages.pop(); // 2
    // put another message onto the channel
    // `multBy20(..)` is a promise-generating function
    // that multiplies a value by `20` after some delay
    token.messages.push( yield multBy20( value ) );
    // transfer control
    yield token;
    // a final message from the CSP run
    yield ("meaning of life: " + token.messages[0]);
}
function *bar(token) {
    // grab message off the top of the channel
    var value = token.messages.pop(); // 40
    // put another message onto the channel
    // `addTo2(..)` is a promise-generating function
    // that adds value to `2` after some delay
    token.messages.push( yield addTo2( value ) );
    // transfer control
    yield token;
}
// start out a sequence with the initial message value of `2`
ASQ( 2 )
// run the two CSP processes paired together
.runner(
    foo,
    bar
)
// whatever message we get out, pass it onto the next
// step in our sequence
.val( function(msg){
    console.log( msg ); // "meaning of life: 42"
} );
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
getifypro
0viewers