chainAsync update: last function shouldn't get 'next' as argument

Confident that my tests pass, but _30.js won't update.
This commit is contained in:
RobertAKARobin
2018-12-07 14:16:26 -06:00
parent 17972d4574
commit 93ab5a9e52
2 changed files with 28 additions and 9 deletions

View File

@ -6,8 +6,11 @@ Loop through an array of functions containing asynchronous events, calling `next
```js ```js
const chainAsync = fns => { const chainAsync = fns => {
let curr = 0; let curr = 0, last = fns[fns.length - 1];
const next = () => fns[curr++](next); const next = () => {
const fn = fns[curr++]
fn(fn === last ? null : next)
}
next(); next();
}; };
``` ```
@ -20,6 +23,10 @@ chainAsync([
}, },
next => { next => {
console.log('1 second'); console.log('1 second');
setTimeout(next, 1000);
},
() => {
console.log('2 second');
} }
]); ]);
``` ```

View File

@ -5,18 +5,30 @@ test('chainAsync is a Function', () => {
expect(chainAsync).toBeInstanceOf(Function); expect(chainAsync).toBeInstanceOf(Function);
}); });
let incrementer = 0
test('Calls all functions in an array', () => { 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([ chainAsync([
next => { next => {
next(); next();
}, },
next => { next => {
(() => { expect(next).toBe(null);
next();
})();
},
next => {
expect(true).toBeTruthy();
} }
]); ]);
}); })