New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

pasync

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pasync - npm Package Compare versions

Comparing version 0.1.0 to 0.2.0

257

lib/index.js

@@ -30,2 +30,4 @@ var async = require('neo-async');

var args = Array.prototype.slice.call(arguments, 0);
var handleError = function(err) {

@@ -45,7 +47,7 @@ if(!err) {

if(iteratorCallbackPos >= 0) {
iteratorCallback = arguments[iteratorCallbackPos];
iteratorCallback = args[iteratorCallbackPos];
} else {
for(var i = 0; i < arguments.length; i++) {
if(typeof arguments[i] === 'function') {
iteratorCallback = arguments[i];
for(var i = 0; i < args.length; i++) {
if(typeof args[i] === 'function') {
iteratorCallback = args[i];
}

@@ -55,7 +57,7 @@ }

// Install a function in the iterator callback's place to avoid accidental misuse
arguments[iteratorCallbackPos] = throwIteratorMisuseError;
args[iteratorCallbackPos] = throwIteratorMisuseError;
// iteratorResult can either be a promise or a value
var iteratorResult;
try {
iteratorResult = promiseIterator.apply(this, arguments);
iteratorResult = promiseIterator.apply(this, args);
} catch (ex) {

@@ -81,2 +83,7 @@ // Treat exceptions as promise rejections

handleError(err);
}).catch(function(err) {
// Throw error in global
setImmediate(function() {
throw err;
});
});

@@ -236,1 +243,239 @@ } else {

exports.waterfall = convertTaskFunction(async.waterfall, 0, -1, 1, true);
// Misc Functions
exports.compose = function() {
var promiseFns = Array.prototype.slice.call(arguments, 0);
var callbackFns = promiseFns.map(function(promiseFn) {
return constructIterator(promiseFn, 1, true, false);
});
var resultCallbackFn = async.compose.apply(async, callbackFns);
return function(arg) {
var self = this;
return new Promise(function(resolve, reject) {
resultCallbackFn.call(self, arg, function(err, result) {
if(err) {
reject(err);
} else {
resolve(result);
}
});
});
};
};
exports.seq = function() {
var promiseFns = Array.prototype.slice.call(arguments, 0);
promiseFns.reverse();
return exports.compose.apply(exports, promiseFns);
};
exports.applyEach = function() {
var promiseFns = arguments[0];
var callback = arguments[arguments.length - 1];
var fnArgs = Array.prototype.slice.call(arguments, 1);
var callbackFns = promiseFns.map(function(promiseFn) {
return constructIterator(promiseFn, fnArgs.length, false, false);
});
return new Promise(function(resolve, reject) {
async.applyEach.apply(async, [callbackFns].concat(fnArgs).concat([function(err) {
if(err) {
reject(err);
} else {
resolve();
}
}]));
});
};
exports.applyEachSeries = function() {
var promiseFns = arguments[0];
var callback = arguments[arguments.length - 1];
var fnArgs = Array.prototype.slice.call(arguments, 1);
var callbackFns = promiseFns.map(function(promiseFn) {
return constructIterator(promiseFn, fnArgs.length, false, false);
});
return new Promise(function(resolve, reject) {
async.applyEachSeries.apply(async, [callbackFns].concat(fnArgs).concat([function(err) {
if(err) {
reject(err);
} else {
resolve();
}
}]));
});
};
exports.queue = function(promiseWorker, concurrency) {
var callbackWorker = constructIterator(promiseWorker, 1, false, false);
var queue = async.queue(callbackWorker, concurrency);
var origPush = queue.push;
var origUnshift = queue.unshift;
queue.push = function(task) {
return new Promise(function(resolve, reject) {
origPush.call(queue, task, function(err) {
if(err) {
reject(err);
} else {
resolve();
}
});
});
};
queue.unshift = function(task) {
return new Promise(function(resolve, reject) {
origUnshift.call(queue, task, function(err) {
if(err) {
reject(err);
} else {
resolve();
}
});
});
};
return queue;
};
exports.priorityQueue = function(promiseWorker, concurrency) {
var callbackWorker = constructIterator(promiseWorker, 1, false, false);
var priorityQueue = async.priorityQueue(callbackWorker, concurrency);
var origPush = priorityQueue.push;
priorityQueue.push = function(task, priority) {
return new Promise(function(resolve, reject) {
origPush.call(priorityQueue, task, priority, function(err) {
if(err) {
reject(err);
} else {
resolve();
}
});
});
};
return priorityQueue;
};
exports.cargo = function(promiseWorker, payload) {
var callbackWorker = constructIterator(promiseWorker, 1, false, false);
var cargo = async.cargo(callbackWorker, payload);
var origPush = cargo.push;
cargo.push = function(task) {
return new Promise(function(resolve, reject) {
origPush.call(cargo, task, function(err) {
if(err) {
reject(err);
} else {
resolve();
}
});
});
};
return cargo;
};
exports.auto = function(tasks) {
var keys = Object.keys(tasks);
keys.forEach(function(task) {
var promiseFn;
var callbackFn = function(cb, results) {
var promiseFnResult;
try {
promiseFnResult = promiseFn.call(this, results);
} catch(ex) {
cb(ex);
return;
}
if(promiseFnResult && typeof promiseFnResult.then === 'function') {
promiseFnResult.then(function(value) {
cb(null, value);
}, function(err) {
cb(err, null);
}).catch(function(err) {
setImmediate(function() {
throw err;
});
});
} else {
cb(null, promiseFnResult);
}
};
if(Array.isArray(tasks[task])) {
promiseFn = tasks[task][tasks[task].length - 1];
tasks[task][tasks[task].length - 1] = callbackFn;
} else {
promiseFn = tasks[task];
tasks[task] = callbackFn;
}
});
return new Promise(function(resolve, reject) {
async.auto.call(async, tasks, function(err, result) {
if(err) {
reject(err);
} else {
resolve(result);
}
});
});
};
exports.retry = function(times, task) {
callbackTask = constructIterator(task, 0, true, false);
return new Promise(function(resolve, reject) {
async.retry(times, callbackTask, function(err, result) {
if(err) {
reject(err);
} else {
resolve(result);
}
});
});
};
exports.nextTick = function(fn) {
if(fn && typeof fn === 'function') {
return async.nextTick(fn);
} else {
return new Promise(function(resolve) {
async.nextTick(resolve);
});
}
};
exports.times = function(times, task) {
var callbackTask = constructIterator(task, 1, false, false);
return new Promise(function(resolve, reject) {
async.times(times, callbackTask, function(err, result) {
if(err) {
reject(err);
} else {
resolve(result);
}
});
});
};
exports.timesSeries = function(times, task) {
var callbackTask = constructIterator(task, 1, false, false);
return new Promise(function(resolve, reject) {
async.timesSeries(times, callbackTask, function(err, result) {
if(err) {
reject(err);
} else {
resolve(result);
}
});
});
};
// Neo-Async Functions
// fn, iteratorPos, iteratorCallbackPos, callbackPos, iteratorProvidesValue, noErrors
exports.mapValues = convertIteratorFunction(async.mapValues, 1, 1, 2, true, false);
exports.mapValuesSeries = convertIteratorFunction(async.mapValuesSeries, 1, 1, 2, true, false);
// New Helper Functions
exports.abort = function(err) {
exports.nextTick(function() {
throw err;
});
};

2

package.json
{
"name": "pasync",
"version": "0.1.0",
"version": "0.2.0",
"description": "Promise-oriented async",

@@ -5,0 +5,0 @@ "main": "./lib/index.js",

# pasync
Version of async that uses promises instead of callbacks.
Version of async that uses promises instead of callbacks. Also includes other asynchronous
promise utilities.

@@ -61,3 +62,47 @@ ```js

* waterfall
* compose
* seq
* applyEach
* applyEachSeries
* queue
* priorityQueue
* cargo
* auto
* retry
* nextTick
* times
* timesSeries
## Neo-Async Functions Implemented
* mapValues
* mapValuesSeries
## Functions not implemented
* iterator
* apply
* memoize
* unmemoize
* log
* dir
* noConflict
## Other Utilities
### abort(err)
This is intended to be used as a last-ditch error handler for promises. Using
promises, if the last rejection handler in a promise throws an exception, it is
silently ignored. Calling `abort(err)` will throw `err` as an exception in the
global scope, calling the process's `uncaughtException` listeners or exiting with
the exception by default. Use it like this:
```js
getUser(nonexistent_id).then(function(user) {
// do something with user
}).catch(function(err) {
// Note the (obvious) errors in the rejection handlers; by default, this will be silently ignored
cunsil.lug(err);
}).catch(pasync.abort); // This will catch the undefined variable error and throw it globally
```

@@ -0,1 +1,3 @@

/*jshint -W030 */
var expect = require('chai').expect;

@@ -602,2 +604,856 @@ var pasync = require('../lib/index');

it('compose', function(done) {
var thisTest = {};
function mul2(n) {
return Promise.resolve(n * 2);
}
function mul3(n) {
expect(this).to.equal(thisTest);
return Promise.resolve(n * 3);
}
function mul4(n) {
return Promise.resolve(n * 4);
}
var composition = pasync.compose(mul2, mul3, mul4);
composition.call(thisTest, 2).then(function(result) {
expect(result).to.equal(48);
done();
}).catch(done);
});
it('compose with error', function(done) {
function mul2(n) {
return Promise.resolve(n * 2);
}
function mul3(n) {
return Promise.reject(123);
}
function mul4(n) {
return Promise.resolve(n * 4);
}
var composition = pasync.compose(mul2, mul3, mul4);
composition(2).then(function(result) {
done(new Error('Should not succeed'));
}, function(err) {
expect(err).to.equal(123);
done();
}).catch(done);
});
it('seq', function(done) {
var thisTest = {};
function mul2(n) {
return Promise.resolve(n * 2);
}
function mul3(n) {
expect(this).to.equal(thisTest);
return Promise.resolve(n * 3);
}
function mul4(n) {
return Promise.resolve(n * 4);
}
var composition = pasync.seq(mul2, mul3, mul4);
composition.call(thisTest, 2).then(function(result) {
expect(result).to.equal(48);
done();
}).catch(done);
});
it('applyEach', function(done) {
var resultArray = [];
function addStuff1(a, b) {
resultArray.push(a);
resultArray.push(b);
return Promise.resolve();
}
function addStuff2(a, b) {
resultArray.push(a);
resultArray.push(b);
return Promise.resolve();
}
function addStuff3(a, b) {
resultArray.push(a);
resultArray.push(b);
return Promise.resolve();
}
pasync.applyEach([
addStuff1,
addStuff2,
addStuff3
], 4, 5).then(function() {
expect(resultArray).to.deep.equal([4, 5, 4, 5, 4, 5]);
done();
}).catch(done);
});
it('applyEach with error', function(done) {
var resultArray = [];
function addStuff1(a, b) {
resultArray.push(a);
resultArray.push(b);
return Promise.resolve();
}
function addStuff2(a, b) {
resultArray.push(a);
resultArray.push(b);
return Promise.reject(123);
}
function addStuff3(a, b) {
resultArray.push(a);
resultArray.push(b);
return Promise.resolve();
}
pasync.applyEach([
addStuff1,
addStuff2,
addStuff3
], 4, 5).then(function() {
done(new Error('Should not succeed'));
}, function(err) {
expect(err).to.equal(123);
done();
}).catch(done);
});
it('applyEachSeries', function(done) {
var resultArray = [];
function addStuff1(a, b) {
resultArray.push(a);
resultArray.push(b);
return Promise.resolve();
}
function addStuff2(a, b) {
resultArray.push(a);
resultArray.push(b);
return Promise.resolve();
}
function addStuff3(a, b) {
resultArray.push(a);
resultArray.push(b);
return Promise.resolve();
}
pasync.applyEachSeries([
addStuff1,
addStuff2,
addStuff3
], 4, 5).then(function() {
expect(resultArray).to.deep.equal([4, 5, 4, 5, 4, 5]);
done();
}).catch(done);
});
it('queue', function(done) {
var responseQueue = [];
var queue = pasync.queue(function(task) {
return new Promise(function(resolve, reject) {
responseQueue.push(task * 2);
resolve();
});
}, 2);
queue.unshift(1).catch(done);
queue.push([2, 3, 4, 5]).catch(done);
queue.drain = function() {
expect(responseQueue).to.deep.equal([2, 4, 6, 8, 10]);
done();
};
});
it('queue with error', function(done) {
var responseQueue = [];
var queue = pasync.queue(function(task) {
return new Promise(function(resolve, reject) {
if(task === 4) {
reject(123);
} else {
responseQueue.push(task * 2);
resolve();
}
});
}, 2);
queue.unshift(1).catch(done);
queue.push([2, 3]).catch(done);
queue.push(4).then(function() {
throw new Error('should not reach');
}, function(err) {
expect(err).to.equal(123);
}).catch(done);
queue.push(5).catch(done);
queue.drain = function() {
expect(responseQueue).to.deep.equal([2, 4, 6, 10]);
done();
};
});
it('priorityQueue', function(done) {
var responseQueue = [];
var priorityQueue = pasync.priorityQueue(function(task) {
return new Promise(function(resolve, reject) {
responseQueue.push(task * 2);
resolve();
});
}, 2);
priorityQueue.push(1, 3).catch(done);
priorityQueue.push([2, 3, 4, 5], 1).catch(done);
priorityQueue.drain = function() {
expect(responseQueue).to.deep.equal([4, 6, 8, 10, 2]);
done();
};
});
it('priorityQueue with error', function(done) {
var responseQueue = [];
var priorityQueue = pasync.priorityQueue(function(task) {
return new Promise(function(resolve, reject) {
if(task === 4) {
reject(123);
} else {
responseQueue.push(task * 2);
resolve();
}
});
}, 2);
priorityQueue.push([2, 3]).catch(done);
priorityQueue.push(4).then(function() {
throw new Error('should not reach');
}, function(err) {
expect(err).to.equal(123);
}).catch(done);
priorityQueue.push(5).catch(done);
priorityQueue.drain = function() {
expect(responseQueue).to.deep.equal([4, 6, 10]);
done();
};
});
it('cargo', function(done) {
var responseArray = [];
var cargo = pasync.cargo(function(tasks) {
tasks.forEach(function(task) {
responseArray.push(task * 12);
});
return Promise.resolve();
}, 5);
cargo.push([1, 2, 3, 4, 5]).catch(done);
cargo.drain = function() {
expect(responseArray).to.deep.equal([12, 24, 36, 48, 60]);
done();
};
});
it('cargo with error', function(done) {
var responseArray = [];
var cargo = pasync.cargo(function(tasks) {
return new Promise(function(resolve, reject) {
var isError = false;
tasks.forEach(function(task) {
if(task === 3) {
isError = true;
} else {
responseArray.push(task * 12);
}
});
if(isError) {
reject(123)
} else {
resolve();
}
});
}, 2);
cargo.push([1, 2, 4, 5]).catch(done);
cargo.push(3).then(function() {
throw new Error('should not reach');
}, function(err) {
expect(err).to.equal(123);
done();
}).catch(done);
});
it('auto', function(done) {
var responseArray = [];
var auto = pasync.auto({
get_data: function() {
responseArray.push(2);
return Promise.resolve(2);
},
da_data: ['get_data', function(results) {
var tempResult = results.get_data * 2;
responseArray.push(tempResult);
return Promise.resolve(tempResult);
}],
get_more_data: ['get_data', 'da_data', function(results) {
var tempResult = results.da_data * 2;
responseArray.push(tempResult);
return Promise.resolve(tempResult);
}]
}).then(function(resultObject) {
expect(responseArray).to.deep.equal([2, 4, 8]);
done();
}).catch(done);
});
it('auto with value', function(done) {
var responseArray = [];
var auto = pasync.auto({
get_data: function() {
responseArray.push(2);
return 2;
},
da_data: ['get_data', function(results) {
var tempResult = results.get_data * 2;
responseArray.push(tempResult);
return Promise.resolve(tempResult);
}],
get_more_data: ['get_data', 'da_data', function(results) {
var tempResult = results.da_data * 2;
responseArray.push(tempResult);
return Promise.resolve(tempResult);
}]
}).then(function(resultObject) {
expect(responseArray).to.deep.equal([2, 4, 8]);
done();
}).catch(done);
});
it('auto with error', function(done) {
var auto = pasync.auto({
fail_me: function() {
return Promise.reject(123);
}
}).then(function() {
throw new Error('should not reach');
}, function(err) {
expect(err).to.equal(123);
done();
}).catch(done);
});
it('auto with throwing error', function(done) {
var auto = pasync.auto({
fail_me: function() {
throw(123);
}
}).then(function() {
throw new Error('should not reach');
}, function(err) {
expect(err).to.equal(123);
done();
}).catch(done);
});
it('retry', function(done) {
var responseArray = [];
var retry = pasync.retry(3, function() {
responseArray.push('a');
responseArray.push('b');
responseArray.push('c');
return Promise.resolve();
}).then(function() {
expect(responseArray).to.deep.equal(['a', 'b', 'c']);
done();
}).catch(done);
});
it('retry with error', function(done) {
var retryCount = 0;
var retry = pasync.retry(3, function() {
retryCount++;
return Promise.reject(123);
}).then(function() {
throw new Error('should not reach');
}, function(err) {
expect(err).to.equal(123);
expect(retryCount).to.equal(3);
done();
}).catch(done);
});
it('nextTick', function(done) {
var resultArray = [];
new Promise(function(resolve) {
pasync.nextTick(resolve);
resultArray.push(1);
}).then(function() {
resultArray.push(2);
expect(resultArray).to.deep.equal([1, 2]);
done();
}).catch(done);
});
it('nextTick chaining', function(done) {
var resultArray = [];
resultArray.push(1);
Promise.resolve().then(function() {
resultArray.push(2);
}).then(pasync.nextTick).then(function() {
expect(resultArray).to.deep.equal([1, 2]);
done();
}).catch(done);
});
it('times', function(done) {
var timesCount = 0;
var timesTest = 2;
pasync.times(8, function(n, next) {
timesCount++;
timesTest = timesTest * 2;
return Promise.resolve();
}).then(function() {
expect(timesCount).to.equal(8);
expect(timesTest).to.equal(512);
done();
}).catch(done);
});
it('times with error', function(done) {
var timesCount = 0;
pasync.times(8, function(n, next) {
timesCount++;
return Promise.reject(123);
}).then(function() {
throw new Error('should not reach');
}, function(err) {
expect(timesCount).to.equal(8);
expect(err).to.equal(123);
done();
}).catch(done);
});
it('timesSeries', function(done) {
var timesCount = 0;
var timesTest = 2;
pasync.timesSeries(17, function(n, next) {
timesCount++;
timesTest = timesTest * 2;
return Promise.resolve();
}).then(function() {
expect(timesCount).to.equal(17);
expect(timesTest).to.equal(262144);
done();
}).catch(done);
});
it('timesSeries with error', function(done) {
pasync.timesSeries(8, function(n, next) {
return Promise.reject(123);
}).then(function() {
throw new Error('should not reach');
}, function(err) {
expect(err).to.equal(123);
done();
}).catch(done);
});
describe('Neo-Async Improvement of Convenience Support', function() {
var testObject = {
notRed: 'red',
notGreen: 'green',
notBlue: 'blue'
};
var numTestObject = {
one: 1,
two: 2,
three: 3
};
it('each with object', function(done) {
var res = [];
pasync.each(testObject, function(el) {
return new Promise(function(resolve) {
setImmediate(function() {
res.push(el);
resolve();
});
});
}).then(function() {
expect(res).to.contain('red');
expect(res).to.contain('blue');
expect(res).to.contain('green');
expect(res).to.have.length(3);
done();
}).catch(done);
});
it('each with values', function(done) {
var res = [];
pasync.each(numTestObject, function(el) {
res.push(el);
}).then(function() {
expect(res).to.contain(1);
expect(res).to.contain(2);
expect(res).to.contain(3);
expect(res).to.have.length(3);
done();
}).catch(done);
});
it('eachSeries', function(done) {
var res = [];
pasync.eachSeries(testObject, function(el) {
return new Promise(function(resolve) {
setImmediate(function() {
res.push(el);
resolve();
});
});
}).then(function() {
expect(res).to.contain('red');
expect(res).to.contain('blue');
expect(res).to.contain('green');
expect(res).to.have.length(3);
done();
}).catch(done);
});
it('eachLimit', function(done) {
var res = [];
pasync.eachLimit(testObject, 2, function(el) {
return new Promise(function(resolve) {
setImmediate(function() {
res.push(el);
resolve();
});
});
}).then(function() {
expect(res).to.contain('red');
expect(res).to.contain('blue');
expect(res).to.contain('green');
expect(res).to.have.length(3);
done();
}).catch(done);
});
it('map with promises', function(done) {
pasync.map(numTestObject, function(el) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(el + 1);
});
});
}).then(function(res) {
expect(res).to.deep.equal([ 2, 3, 4 ]);
done();
}).catch(done);
});
it('map with values', function(done) {
pasync.map(numTestObject, function(el) {
return el + 1;
}).then(function(res) {
expect(res).to.deep.equal([2, 3, 4]);
done();
}).catch(done);
});
it('mapSeries', function(done) {
pasync.mapSeries(numTestObject, function(el) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(el + 1);
});
});
}).then(function(res) {
expect(res).to.deep.equal([2, 3, 4]);
done();
}).catch(done);
});
it('mapLimit', function(done) {
pasync.mapLimit(numTestObject, 2, function(el) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(el + 1);
});
});
}).then(function(res) {
expect(res).to.deep.equal([2, 3, 4]);
done();
}).catch(done);
});
it('filter', function(done) {
pasync.filter(numTestObject, function(el) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(el > 1);
});
});
}).then(function(res) {
expect(res).to.deep.equal([2, 3]);
done();
}).catch(done);
});
it('filterSeries', function(done) {
pasync.filterSeries(numTestObject, function(el) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(el > 1);
});
});
}).then(function(res) {
expect(res).to.deep.equal([2, 3]);
done();
}).catch(done);
});
it('reject', function(done) {
pasync.reject(numTestObject, function(el) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(el > 1);
});
});
}).then(function(res) {
expect(res).to.deep.equal([1]);
done();
}).catch(done);
});
it('rejectSeries', function(done) {
pasync.rejectSeries(numTestObject, function(el) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(el > 1);
});
});
}).then(function(res) {
expect(res).to.deep.equal([1]);
done();
}).catch(done);
});
it('reduce', function(done) {
pasync.reduce(numTestObject, 0, function(memo, item) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(memo + item);
});
});
}).then(function(res) {
expect(res).to.equal(6);
done();
}).catch(done);
});
it('reduceRight', function(done) {
pasync.reduceRight(numTestObject, 0, function(memo, item) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(memo + item);
});
});
}).then(function(res) {
expect(res).to.equal(6);
done();
}).catch(done);
});
it('detect', function(done) {
pasync.detect(numTestObject, function(item) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(item === 2);
});
});
}).then(function(res) {
expect(res).to.equal(2);
done();
}).catch(done);
});
it('detectSeries', function(done) {
pasync.detectSeries(numTestObject, function(item) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(item === 2);
});
});
}).then(function(res) {
expect(res).to.equal(2);
done();
}).catch(done);
});
it('sortBy', function(done) {
var unorderedNumTestObject = {
one: 2,
two: 3,
three: 1
};
pasync.sortBy(unorderedNumTestObject, function(item) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(item);
});
});
}).then(function(res) {
expect(res).to.deep.equal([1, 2, 3]);
done();
}).catch(done);
});
it('some', function(done) {
pasync.some(numTestObject, function(item) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(item === 2);
});
});
}).then(function(res) {
expect(res).to.equal(true);
done();
}).catch(done);
});
it('every', function(done) {
pasync.every(numTestObject, function(item) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(item === 2);
});
});
}).then(function(res) {
expect(res).to.equal(false);
done();
}).catch(done);
});
it('concat', function(done) {
var specialNumTestObject = {
one: [1, 2],
four: [3, 4]
};
pasync.concat(specialNumTestObject, function(item) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(item);
});
});
}).then(function(res) {
expect(res).to.deep.equal([1, 2, 3, 4]);
done();
}).catch(done);
});
it('concatSeries', function(done) {
var specialNumTestObject = {
one: [1, 2],
four: [3, 4]
};
pasync.concatSeries(specialNumTestObject, function(item) {
return new Promise(function(resolve) {
setImmediate(function() {
resolve(item);
});
});
}).then(function(res) {
expect(res).to.deep.equal([1, 2, 3, 4]);
done();
}).catch(done);
});
});
describe('Neo-Async features', function() {
it('mapValues as array', function(done) {
var arr = [1, 2, 3];
pasync.mapValues(arr, function(el) {
return el + 1;
}).then(function(res) {
expect(res).to.deep.equal({
0: 2,
1: 3,
2: 4
});
done();
}).catch(done);
});
it('mapValues as object', function(done) {
var arr = {
hello: 1,
goodbye: 2,
dough: 3
};
pasync.mapValues(arr, function(el) {
return el + 1;
}).then(function(res) {
expect(res).to.deep.equal({
hello: 2,
goodbye: 3,
dough: 4
});
done();
}).catch(done);
});
it('mapValuesSeries as array', function(done) {
var arr = [1, 2, 3];
pasync.mapValuesSeries(arr, function(el) {
return el + 1;
}).then(function(res) {
expect(res).to.deep.equal({
0: 2,
1: 3,
2: 4
});
done();
}).catch(done);
});
it('mapValuesSeries as object', function(done) {
var arr = {
hello: 1,
goodbye: 2,
dough: 3
};
pasync.mapValuesSeries(arr, function(el) {
return el + 1;
}).then(function(res) {
expect(res).to.deep.equal({
hello: 2,
goodbye: 3,
dough: 4
});
done();
}).catch(done);
});
it('abort', function(done) {
// fudge around with uncaught exception listeners ...
var oldListeners = process.listeners('uncaughtException').slice(0);
oldListeners.forEach(function(listener) {
process.removeListener('uncaughtException', listener);
});
var newListener = function(exception) {
process.removeListener('uncaughtException', newListener);
oldListeners.forEach(function(listener) {
process.on('uncaughtException', listener);
});
expect(exception).to.equal(123);
done();
};
process.on('uncaughtException', newListener);
// Do test
new Promise(function(resolve) {
setTimeout(resolve, 5);
}).then(function() {
throw 123;
}).catch(pasync.abort);
});
});
});

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc