In this example we'd like to have a factory that works per request and allows to keep track of created Models We create a factory per request and pass it around to the parts of the code that need access This can quickly lead to hard to understand, messy code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// In this example we'd like to have a factory that works per request and allows to keep track of created Models | |
// The singleton will however apply to all requests and thus keep growing | |
// For that reason we supply it with a reset function. | |
// This works fine until between receiving a request and sending a response there is no asynchronous code execution | |
// Once multiple requests come in in very short intervals, the asynchronous execution will lead to requests cross-polluting | |
// the singleton class | |
// factory.js | |
// | |
// Should be per-request so we can keep track |
In this example we'd like to have a factory that works per request and allows to keep track of created Models
We create a factory per request and create a domain to which we attach the factory
That way the singleton is automatically shared with all parts of the application under process.domain.*
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var items = [{'price': 123, 'tax': 0.1}, {'price': 234, 'tax': 0.3}]; | |
var taxCalculator = function (items) { | |
var taxedMapper = function (item) { | |
return item.price + item.price * item.tax; | |
}; | |
var nonTaxedMapper = function (item) { | |
return item.price; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var uuid = require('node-uuid'); | |
var _ = require('lodash'); | |
var privates = {}; | |
function MyClass () { | |
this.id = uuid.v4(); | |
privates[this.id].foobar = 'somethingprivate'; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
var assert = require('assert'), | |
director = require('director'), | |
EventEmitter = require('events').EventEmitter, | |
ns,// = require('continuation-local-storage').createNamespace('testing'), | |
express = require('express'), | |
app = express(), | |
domain = require('domain'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//\///// | |
//\ overLIB 4.22 - You may not remove or change this notice. | |
//\ Copyright Erik Bosrup 1998-2004. All rights reserved. | |
//\ | |
//\ Contributors are listed on the homepage. | |
//\ This file might be old, always check for the latest version at: | |
//\ http://www.bosrup.com/web/overlib/ | |
//\ | |
//\ Please read the license agreement (available through the link above) | |
//\ before using overLIB. Direct any licensing questions to erik@bosrup.com. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var async = require('async'); | |
var sampleData = [{'name':'name1', 'age':'age1'},{'name':'name2', 'age':'age2'},{'name':'name3', 'age':'age3'}]; | |
async.mapSeries(sampleData, function (data,callback) { | |
return callback(null, data['name']); | |
}, function(err, results) { | |
console.log('results : ', results); | |
}); | |
// Getting data by name | |
async.reduce(sampleData, {}, function (byName, data, callback) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This simply calls the callback with some data after a second | |
// Could be an AJAX call for example | |
var doSomethingAsync = function (callback) { | |
setTimeout(function () { | |
callback({ some: 'data' }); | |
}, 1000); | |
}; | |
var fnThatMakesAsyncCall = function () { | |
// From the outside there is no way to change this callback |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var _ = require('lodash'); | |
var Promise = require('bluebird'); | |
var fakeRequest = function (url) { | |
return new Promise (function (resolve, reject) { | |
console.log(Date.now(), 'Request to', url); | |
setTimeout(function () { | |
console.log(Date.now(), 'Response from', url); | |
resolve(url) | |
}, Math.random() * 5000); |
OlderNewer