diff --git a/snippets/chainAsync.md b/snippets/chainAsync.md index 10bbf6613..5cb3c0985 100644 --- a/snippets/chainAsync.md +++ b/snippets/chainAsync.md @@ -7,7 +7,11 @@ Loop through an array of functions containing asynchronous events, calling `next ```js const chainAsync = fns => { let curr = 0; - const next = () => fns[curr++](next); + const last = fns[fns.length - 1]; + const next = () => { + const fn = fns[curr++] + fn === last ? fn() : fn(next); + } next(); }; ``` @@ -20,6 +24,10 @@ chainAsync([ }, next => { console.log('1 second'); + setTimeout(next, 1000); + }, + () => { + console.log('2 second'); } ]); ``` diff --git a/test/chainAsync.test.js b/test/chainAsync.test.js index ba640c625..4a01542c5 100644 --- a/test/chainAsync.test.js +++ b/test/chainAsync.test.js @@ -5,18 +5,30 @@ test('chainAsync is a Function', () => { expect(chainAsync).toBeInstanceOf(Function); }); +let incrementer = 0; test('Calls all functions in an array', () => { + chainAsync([ + next => { + incrementer += 1; + next(); + }, + next => { + incrementer += 1; + next(); + }, + next => { + expect(incrementer).toEqual(2); + } + ]); +}); + +test('Last function does not receive "next" argument', () => { chainAsync([ next => { next(); }, next => { - (() => { - next(); - })(); - }, - next => { - expect(true).toBeTruthy(); + expect(next).toBe(undefined); } ]); });