diff --git a/package.json b/package.json index 6419d3ac..b7f7cd04 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,6 @@ "underscore": "1.4.4", "backbone": "1.0.0", "handlebars": "git://github.com/spikebrehm/handlebars.js.git#0687c7016c62122ab160a8683817a931b03354ad", - "async":"0.1.22", "qs": "0.5.1", "express": "~3.0.6", "validator": "0.4.21", diff --git a/scripts/postinstall.js b/scripts/postinstall.js index b0e6fe01..0e55a27f 100644 --- a/scripts/postinstall.js +++ b/scripts/postinstall.js @@ -10,7 +10,6 @@ var root = __dirname + '/..', var dependencies = [ 'underscore', 'backbone', - 'async', 'handlebars' ]; diff --git a/shared/fetcher.js b/shared/fetcher.js index 2539dc00..454e0919 100644 --- a/shared/fetcher.js +++ b/shared/fetcher.js @@ -33,11 +33,10 @@ and returns an identifying object: } */ -var Backbone, CollectionStore, ModelStore, async, modelUtils, _; +var Backbone, CollectionStore, ModelStore, modelUtils, _; _ = require('underscore'); Backbone = require('backbone'); -async = require('async'); modelUtils = require('./modelUtils'); ModelStore = require('./store/model_store'); @@ -56,6 +55,34 @@ function Fetcher(options) { }); } +function parallel(tasks, callback) { + var results = {}, + completed = 0, + length; + + if (_.isEmpty(tasks)) { + return callback(null, results); + } + + length = _.keys(tasks).length; + _.each(tasks, function(task, key) { + task(function(err) { + var args = Array.prototype.slice.call(arguments, 1); + if (args.length <= 1) { + args = args[0]; + } + results[key] = args; + + if (err) { + callback(err, results); + callback = function() { }; + } else if (++completed >= length) { + callback(null, results); + } + }); + }); +}; + /** * Returns an instance of Model or Collection. */ @@ -185,7 +212,7 @@ Fetcher.prototype._retrieve = function(fetchSpecs, options, callback) { } }.bind(this); }, this); - async.parallel(batchedRequests, callback); + parallel(batchedRequests, callback); }; Fetcher.prototype.needsFetch = function(modelData, spec) {