aa - async await
aa - Async-Await library.
co like library, go like channel, thunkify or promisefy wrap package.
using ES6 (ES2015) generator function.
compatible with co@3 and co@4.
INSTALL:
$ npm install aa
PREPARE:
var aa = require('aa');
USAGE:
Quick sample code: aa-readme-example.js
$ node aa-readme-example.js
or
$ iojs aa-readme-example.js
var aa = require('aa');
function sleep(ms) {
var args = [].slice.call(arguments, 1);
setTimeout.apply(null, [args.pop(), ms, null].concat(args));
}
sleep(1000, function (err, val) { console.log('1000 ms OK'); });
function delay(ms) {
var args = [].slice.call(arguments);
return function (cb) {
sleep.apply(null, args.concat(cb));
};
}
delay(1100)(
function (err, val) { console.log('1100 ms OK'); }
);
var wait = aa.promisify(sleep);
wait(1200)(
function (err, val) { console.log('1200 ms OK'); }
);
wait(1300).then(
function (val) { console.log('1300 ms OK'); },
function (err) { console.log('1300 ms NG', err); }
).catch(
function (err) { console.log('1300 ms NG2', err); }
);
aa(function *() {
yield 1;
yield [1, 2, 3];
yield {x:1, y:2, z:3};
yield Promise.resolve(2);
yield delay(800);
yield wait(800);
console.log('0:', yield wait(300, 0));
console.log('1:', yield wait(300, 1));
console.log('[1, 2, 3]:',
yield Promise.all([wait(200, 1), wait(300, 2), wait(100, 3)]));
console.log('[4, 5, 6]:',
yield [wait(200, 4), wait(300, 5), wait(100, 6)]);
console.log('{x:7, y:8, z:9}:',
yield {x:wait(200, 7), y:wait(300, 8), z:wait(100, 9)});
var chan = aa.chan();
sleep(300, 20, chan);
sleep(200, 10, chan);
var a = yield chan;
var b = yield chan;
console.log('10 20:', a, b);
aa(function *() {
yield wait(200);
return 200;
})(chan);
aa(function *() {
yield wait(100);
return 100;
})(chan);
aa(function *() {
yield wait(300);
return 300;
})(chan);
var x = yield chan;
var y = yield chan;
var z = yield chan;
console.log('top 3 winners: 100 200 300:', x, y, z);
var chan1 = aa.chan(), chan2 = aa.chan();
aa(function *() {
sleep(100, 111, chan1);
console.log('222:', yield chan2);
sleep(100, 333, chan1);
console.log('444:', yield chan2);
sleep(100, 555, chan1);
return 666;
})(chan);
aa(function *() {
console.log('111:', yield chan1);
sleep(100, 222, chan2);
console.log('333:', yield chan1);
sleep(100, 444, chan2);
console.log('555:', yield chan1);
return 777;
})(chan);
console.log('666 777:', yield chan, yield chan);
return 11;
})
.then(
function (val) {
console.log('11 val:', val);
return wait(100, 22); },
function (err) {
console.log('11 err:', err);
return wait(100, 22); }
)
(function (err, val) {
console.log('22 val:', val, err ? 'err:' + err : '');
return wait(100, 33); })
(function (err, val) {
console.log('33 val:', val, err ? 'err:' + err : '');
return wait(100, 44); })
.then(
function (val) {
console.log('44 val:', val);
return wait(100, 55); },
function (err) {
console.log('44 err:', err);
return wait(100, 55); }
)
.catch(
function (err) {
console.log('55 err:', err);
return wait(100, 66); }
);
LICENSE:
MIT