1.0.6 • Published 7 years ago
ctoa v1.0.6
ctoa
Easily wrap up callbacks into async functions, even in loops. Async functions may also be executed in sequence/series or asynchronously.
Installation
npm install --save ctoa
Usage
There are many different use cases.
Full Example
const http = require('http');
const fs = require('fs');
const Resolver = require('ctoa');
async function test() {
return Resolver.async(async (resolve) => { // Note 'Resolver.async'
fs.writeFileSync('test.txt', 'data', 'utf8'); // Hey, that's not asynchronous!
fs.rename('test.txt', 'moved.txt', (err) => { // This is
if (err) throw err;
console.log('1 done');
resolve('return this when done'); // This will always be called, it also acts like done, use 'setReturn()' if you don't want to trigger 'done()'
});
}, async (resolve) => {
http.createServer(function(request, response){
response.writeHead(200, {'Content-type':'text/plan'});
response.write('Hello Node JS Server Response');
response.end();
}).listen(7000, '0.0.0.0', () => {
console.log('2 done');
resolve();
});
}, async (resolve) => {
http.createServer(function(request, response){
response.writeHead(200, {'Content-type':'text/plan'});
response.write('Hello Node JS Server Response');
response.end();
}).listen(7001, () => {
console.log('3 done');
resolve();
});
});
}
async function caller() {
console.log( await test() ); // This will return the string 'return this when done'
}
caller();
Method: Wrapping Callback Function: Asynchronously
async function test() {
return Resolver.async(async (resolve) => {
...
resolve('return this when done');
}, async (resolve) => {
...
resolve();
}, async (resolve) => {
...
resolve();
});
}
async function caller() {
console.log( await test() ); // This will return the string 'return this when done'
}
caller();
Method: Wrapping Async Function: Series
async function test() {
return Resolver.series(async (resolve) => { // Note 'Resolver.series'
...
resolve();
}, async (resolve) => {
...
resolve();
}, async (resolve) => {
...
resolve();
});
}
async function caller() {
await test();
}
caller();
Method: Wrapping Array Function: Asynchronously
async function test() {
let arr = [1, 2, 3, 4, 5];
let resolver = new Resolver();
arr.forEach((filePath, index) => {
resolver.wrap(async (resolve) => {
fs.readFile('SOME_FILE.txt', (err, data) => {
resolve();
});
});
});
return resolver.promise;
}
async function caller() {
await test(); // This will return the string 'return this when done'
}
caller();