Skip to content

Commit

Permalink
Update whilst and doWhilst to support promised arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
jgornick committed Oct 13, 2016
1 parent 4ac44dd commit e61bf26
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 4 deletions.
5 changes: 3 additions & 2 deletions src/doWhilst.js
@@ -1,11 +1,12 @@
import tryFn from './tryFn';
import promised from './promised';
import whilst from './whilst';

export default function doWhilst(task, condition, ...args) {
export default promised(function doWhilst(task, condition, ...args) {
return tryFn(task, ...args)
.then((result) =>
Array.isArray(result)
? whilst(condition, task, ...result)
: whilst(condition, task, result)
);
};
});
5 changes: 3 additions & 2 deletions src/whilst.js
@@ -1,6 +1,7 @@
import tryFn from './tryFn';
import promised from './promised';

export default function whilst(condition, task, ...args) {
export default promised(function whilst(condition, task, ...args) {
return tryFn(condition, ...args)
.then((conditionResult) => {
return conditionResult
Expand All @@ -12,4 +13,4 @@ export default function whilst(condition, task, ...args) {
)
: Promise.resolve();
});
};
});
48 changes: 48 additions & 0 deletions test/doWhilst.js
Expand Up @@ -103,6 +103,54 @@ describe('doWhilst', function() {
]);
});

it('supports promised arguments', function() {
let order = [];
const p = async.doWhilst(
new Promise(resolve => setTimeout(
resolve.bind(
null,
count => new Promise(resolve => setTimeout(_ => {
order.push(`task${count}`);
count++;
resolve(count);
}, 25))
),
25
)),

new Promise(resolve => setTimeout(
resolve.bind(
null,
count => new Promise(resolve => setTimeout(_ => {
order.push(`condition${count}`);
resolve(count < 5);
}, 25))
),
25
)),


Promise.resolve(0)
);

return Promise.all([
p.should.eventually.equal(undefined),
p.then(() => order.should.deep.equal([
'task0',
'condition1',
'task1',
'condition2',
'task2',
'condition3',
'task3',
'condition4',
'task4',
'condition5'
]))
]);
});


it('rejects in delayed task', function() {
let order = [];
const p = async.doWhilst(
Expand Down
47 changes: 47 additions & 0 deletions test/whilst.js
Expand Up @@ -106,6 +106,53 @@ describe('whilst', function() {
]);
});

it('supports promised arguments', function() {
let order = [];
const p = async.whilst(
new Promise(resolve => setTimeout(
resolve.bind(
null,
count => new Promise(resolve => setTimeout(_ => {
order.push(`condition${count}`);
resolve(count < 5);
}, 25))
),
25
)),

new Promise(resolve => setTimeout(
resolve.bind(
null,
count => new Promise(resolve => setTimeout(_ => {
order.push(`task${count}`);
count++;
resolve(count);
}, 25))
),
25
)),

Promise.resolve(0)
);

return Promise.all([
p.should.eventually.equal(undefined),
p.then(() => order.should.deep.equal([
'condition0',
'task0',
'condition1',
'task1',
'condition2',
'task2',
'condition3',
'task3',
'condition4',
'task4',
'condition5'
]))
]);
});

it('rejects in delayed task', function() {
let order = [];
const p = async.whilst(
Expand Down

0 comments on commit e61bf26

Please sign in to comment.