Skip to content

Instantly share code, notes, and snippets.

@justinline
Created May 29, 2021 14:20
Show Gist options
  • Save justinline/392312f46a6c960bb43387eb84bc2065 to your computer and use it in GitHub Desktop.
Save justinline/392312f46a6c960bb43387eb84bc2065 to your computer and use it in GitHub Desktop.
async/await with generators
// Recursively evaluates generator values
function customAsync(generatorFn) {
const generator = generatorFn();
const resolve = (generatorResult) => {
const noMoreIterations = generatorResult.done;
if (noMoreIterations) {
return Promise.resolve(generatorResult.value);
}
return Promise.resolve(generatorResult.value)
.then((newValue) => resolve(generator.next(newValue)))
.catch((error) => resolve(generator.throw(error)));
};
return resolve(generator.next());
}
describe('customAsync', () => {
it('should await the values of the function', () =>
customAsync(function* () {
const result = yield Promise.resolve('My API value');
expect(result).toBe('My API value');
}));
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment