Remove dependency on 'async'
This commit removes the last current dependency of Cylon, 'async'. In it's place, simplified versions of the methods used have been added so lib/utils/helpers.js.
This commit is contained in:
parent
f3efa83643
commit
0719fa203c
|
@ -8,8 +8,6 @@
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var Async = require("async");
|
|
||||||
|
|
||||||
var Logger = require("./logger"),
|
var Logger = require("./logger"),
|
||||||
Robot = require("./robot"),
|
Robot = require("./robot"),
|
||||||
Config = require("./config"),
|
Config = require("./config"),
|
||||||
|
@ -113,7 +111,7 @@ Cylon.api = function api(Server, opts) {
|
||||||
Cylon.start = function start() {
|
Cylon.start = function start() {
|
||||||
var starters = _.pluck(this.robots, "start");
|
var starters = _.pluck(this.robots, "start");
|
||||||
|
|
||||||
Async.parallel(starters, function() {
|
_.parallel(starters, function() {
|
||||||
var mode = Utils.fetch(Config, "workMode", "async");
|
var mode = Utils.fetch(Config, "workMode", "async");
|
||||||
|
|
||||||
if (mode === "sync") {
|
if (mode === "sync") {
|
||||||
|
@ -157,7 +155,7 @@ Cylon.halt = function halt(callback) {
|
||||||
var timeout = Config.haltTimeout || 3000;
|
var timeout = Config.haltTimeout || 3000;
|
||||||
Utils.after(timeout, callback);
|
Utils.after(timeout, callback);
|
||||||
|
|
||||||
Async.parallel(fns, callback);
|
_.parallel(fns, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
Cylon.toJSON = function() {
|
Cylon.toJSON = function() {
|
||||||
|
|
13
lib/robot.js
13
lib/robot.js
|
@ -16,8 +16,7 @@ var initializer = require("./initializer"),
|
||||||
|
|
||||||
var validator = require("./validator");
|
var validator = require("./validator");
|
||||||
|
|
||||||
var Async = require("async"),
|
var EventEmitter = require("events").EventEmitter;
|
||||||
EventEmitter = require("events").EventEmitter;
|
|
||||||
|
|
||||||
// used when creating default robot names
|
// used when creating default robot names
|
||||||
var ROBOT_ID = 1;
|
var ROBOT_ID = 1;
|
||||||
|
@ -288,7 +287,7 @@ Robot.prototype.start = function(callback) {
|
||||||
}
|
}
|
||||||
}.bind(this);
|
}.bind(this);
|
||||||
|
|
||||||
Async.series([
|
_.series([
|
||||||
this.startConnections,
|
this.startConnections,
|
||||||
this.startDevices,
|
this.startDevices,
|
||||||
start
|
start
|
||||||
|
@ -356,7 +355,7 @@ Robot.prototype.startConnections = function(callback) {
|
||||||
}.bind(this);
|
}.bind(this);
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
return Async.parallel(starters, callback);
|
return _.parallel(starters, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -386,7 +385,7 @@ Robot.prototype.startDevices = function(callback) {
|
||||||
};
|
};
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
return Async.parallel(starters, callback);
|
return _.parallel(starters, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -406,8 +405,8 @@ Robot.prototype.halt = function(callback) {
|
||||||
connections = _.pluck(this.connections, "disconnect");
|
connections = _.pluck(this.connections, "disconnect");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Async.parallel(devices, function() {
|
_.parallel(devices, function() {
|
||||||
Async.parallel(connections, callback);
|
_.parallel(connections, callback);
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
var msg = "An error occured while attempting to safely halt the robot";
|
var msg = "An error occured while attempting to safely halt the robot";
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
/* eslint no-use-before-define: 0 */
|
||||||
|
|
||||||
var __slice = Array.prototype.slice;
|
var __slice = Array.prototype.slice;
|
||||||
|
|
||||||
var H = module.exports = {};
|
var H = module.exports = {};
|
||||||
|
@ -210,3 +212,68 @@ function includes(arr, value) {
|
||||||
extend(H, {
|
extend(H, {
|
||||||
includes: includes
|
includes: includes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function parallel(functions, done) {
|
||||||
|
var total = functions.length,
|
||||||
|
completed = 0,
|
||||||
|
results = [],
|
||||||
|
error;
|
||||||
|
|
||||||
|
function callback(err, result) {
|
||||||
|
if (error) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err || error) {
|
||||||
|
error = err;
|
||||||
|
done(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
completed++;
|
||||||
|
results.push(result);
|
||||||
|
|
||||||
|
if (completed === total) {
|
||||||
|
done(null, results);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!functions.length) { done(); }
|
||||||
|
|
||||||
|
functions.forEach(function(fn) { fn(callback); });
|
||||||
|
}
|
||||||
|
|
||||||
|
extend(H, {
|
||||||
|
parallel: parallel
|
||||||
|
});
|
||||||
|
|
||||||
|
function series(functions, done) {
|
||||||
|
var results = [],
|
||||||
|
error;
|
||||||
|
|
||||||
|
function callback(err, result) {
|
||||||
|
if (err || error) {
|
||||||
|
error = err;
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
results.push(result);
|
||||||
|
|
||||||
|
if (!functions.length) {
|
||||||
|
return done(null, results);
|
||||||
|
}
|
||||||
|
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
|
||||||
|
function next() {
|
||||||
|
functions.shift()(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!functions.length) { done(null, results); }
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
|
||||||
|
extend(H, {
|
||||||
|
series: series
|
||||||
|
});
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
"hardware": {
|
"hardware": {
|
||||||
"*": false,
|
"*": false,
|
||||||
"./": false,
|
"./": false,
|
||||||
"async": true,
|
|
||||||
"./lib": true
|
"./lib": true
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -51,9 +50,5 @@
|
||||||
"mocha": "2.2.4",
|
"mocha": "2.2.4",
|
||||||
"sinon": "1.14.1",
|
"sinon": "1.14.1",
|
||||||
"eslint": "0.22.1"
|
"eslint": "0.22.1"
|
||||||
},
|
|
||||||
|
|
||||||
"dependencies": {
|
|
||||||
"async": "0.9.0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -289,4 +289,90 @@ describe("Helpers", function() {
|
||||||
expect(fn(arr, {})).to.be.eql(false);
|
expect(fn(arr, {})).to.be.eql(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("#parallel", function() {
|
||||||
|
var fn1, fn2, fn3, callback;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
fn1 = stub();
|
||||||
|
fn2 = stub();
|
||||||
|
fn3 = stub();
|
||||||
|
callback = stub();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("executes a set of functions in parallel", function() {
|
||||||
|
_.parallel([fn1, fn2, fn3], callback);
|
||||||
|
|
||||||
|
expect(fn1).to.be.called;
|
||||||
|
expect(fn2).to.be.called;
|
||||||
|
expect(fn3).to.be.called;
|
||||||
|
expect(callback).to.not.be.called;
|
||||||
|
|
||||||
|
fn1.yield(null, true);
|
||||||
|
expect(callback).to.not.be.called;
|
||||||
|
fn2.yield(null, true);
|
||||||
|
expect(callback).to.not.be.called;
|
||||||
|
fn3.yield(null, true);
|
||||||
|
|
||||||
|
expect(callback).to.be.calledWith(null, [true, true, true]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("stops immediately if there's an error", function() {
|
||||||
|
_.parallel([fn1, fn2, fn3], callback);
|
||||||
|
|
||||||
|
fn1.yield(true, null);
|
||||||
|
|
||||||
|
expect(callback).to.be.calledWith(true);
|
||||||
|
|
||||||
|
fn2.yields(null, true);
|
||||||
|
fn3.yields(null, true);
|
||||||
|
|
||||||
|
expect(callback).to.be.calledOnce;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("#series", function() {
|
||||||
|
var fn1, fn2, fn3, callback;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
fn1 = stub();
|
||||||
|
fn2 = stub();
|
||||||
|
fn3 = stub();
|
||||||
|
callback = stub();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("executes a set of functions in series", function() {
|
||||||
|
_.series([fn1, fn2, fn3], callback);
|
||||||
|
|
||||||
|
expect(fn1).to.be.called;
|
||||||
|
expect(fn2).to.not.be.called;
|
||||||
|
expect(fn3).to.not.be.called;
|
||||||
|
expect(callback).to.not.be.called;
|
||||||
|
|
||||||
|
fn1.yield(null, true);
|
||||||
|
|
||||||
|
expect(fn2).to.be.called;
|
||||||
|
expect(fn3).to.not.be.called;
|
||||||
|
expect(callback).to.not.be.called;
|
||||||
|
|
||||||
|
fn2.yield(null, true);
|
||||||
|
|
||||||
|
expect(fn3).to.be.called;
|
||||||
|
expect(callback).to.not.be.called;
|
||||||
|
|
||||||
|
fn3.yield(null, true);
|
||||||
|
|
||||||
|
expect(callback).to.be.calledWith(null, [true, true, true]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("stops immediately if there's an error", function() {
|
||||||
|
_.series([fn1, fn2, fn3], callback);
|
||||||
|
|
||||||
|
fn1.yield(true, null);
|
||||||
|
|
||||||
|
expect(fn2).to.not.be.called;
|
||||||
|
expect(fn3).to.not.be.called;
|
||||||
|
expect(callback).to.be.calledWith(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue