1.0.6 • Published 7 years ago

ctoa v1.0.6

Weekly downloads
16
License
ISC
Repository
-
Last release
7 years ago

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();
1.0.6

7 years ago

1.0.5

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago