async-resource

0.0.9 • Public • Published

async-resource

This is a simple interface for initializing async resources. Send it an init function and it will return a function that calls back with your initialized resource. It ensures that the resource will only be initialized once.

Installation

$ npm install async-resource

Usage

With a class.

// DB client has a bunch of setup that requires async calls
var DBClient = require('db').Client;
 
 
var getResource = require('async-resource').get
var ensureResource = require('async-resource').ensure
 
function DbWrapper(connectionUrl, config) {
  var self = this;
 
  // wrap the init method with getResource
  this.ensureConnected = getResource(function(callback) {
    DbClient.connect(connectionUrl, function(err, db) {
      if (err) return callback(err)
      self.db = db;
 
      // make sure to callback with true if the setup is successful
      if (!config.indexes) return callback(null, true);
      setupIndexes(db, config.indexes, function(err) {
        callback(err, true);
      });
    });
  })
};
 
// simple methods that depend on a connected db.
// a real wrapper would most likely have more complicted
// methods.
DbWrapper.prototype.select = function(query, callback) {
  this.db.select(query, callback);
};
 
DbWrapper.prototype.insert = function(query, callback) {
  this.db.insert(query, callback);
};
 
DbWrapper.prototype.update = function(query, callback) {
  this.db.update(query, callback);
};
 
DbWrapper.prototype.delete = function(query, callback) {
  this.db.delete(query, callback);
};
 
// wrap all the methods that depend on the connected DB
ensureResource(DbWrapper.prototype, 'ensureConnected', [ 'select', 'insert', 'update', 'delete' ]);

With a function.

// DB client has a bunch of setup that requires async calls
var DBClient = require('db').Client;
 
 
var getResource = require('async-resource').get
var ensureFn = require('async-resource').ensureFn
 
var db;
 
var init = function(callback) {
  DbClient.connect(connectionUrl, function(err, db) {
    if (err) return callback(err)
    db = db;
 
    // make sure to callback with true if the setup is successful
    if (!config.indexes) return callback(null, true);
    setupIndexes(db, config.indexes, function(err) {
      callback(err, true);
    });
  });
};
var ensureInit = getResource(init);
 
var select = function(query, callback) {
  db.select(query, callback);
};
// wrap select
select = ensureFn(select, ensureInit);

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.0.9
    2
    • latest

Version History

Package Sidebar

Install

npm i async-resource

Weekly Downloads

9

Version

0.0.9

License

BSD

Last publish

Collaborators

  • dmcaulay