forward methods to asynchronously acquired objects


Forward methods to asynchronously acquired objects.

Specify the method names you want to forward, and provide a callback for getting the object that should receive forwarded method calls.

var assert = require('assert')
var forward = require('./')
var methods = ['doSomethingAsync']
var proxy = forward(['double'], getSlowDoubler)
proxy.double(4, function (errresult) {
  assert.equal(8, result)
  console.log('ok - async method works')

The getSlowDoubler function looks like this, but it could be any sort of async function, as long as it returns an object with the expected methods:

function getSlowDoubler (callback) {
  var service = {
    doublefunction (ncallback) {
      setTimeout(function () {
        callback(null, n * 2)
      }, 100)
  // return the service asynchronously via callback 
  process.nextTick(function () {
    callback(null, service)

Any errors that occur while getting the method receiver will be forwarded to the callback:

function throwsAnError (callback) {
  throw new Error('whoops')
var proxy = forward(['myMethod'], throwsAnError)
proxy.myMethod(function (err) {
  assert.equal('whoops', err.message)
  console.log('ok - got expected error')

The same behaviour will work for errors that are returned via callback or thrown when invoking the method.