Skip to content

Instantly share code, notes, and snippets.

@zlatkov
Created March 11, 2021 12:53
Show Gist options
  • Save zlatkov/acbc21d3cfeb91eb99b858ce63f2b63d to your computer and use it in GitHub Desktop.
Save zlatkov/acbc21d3cfeb91eb99b858ce63f2b63d to your computer and use it in GitHub Desktop.
function* makeFibonacciSequenceGenerator(endIndex = Infinity) {
let previousNumber = 0;
let currentNumber = 1;
let skipCount = 0;
try {
for (let currentIndex = 0; currentIndex < endIndex; currentIndex++) {
if (skipCount === 0) {
skipCount = yield currentNumber;
skipCount = skipCount === undefined ? 0 : skipCount;
} else if (skipCount > 0){
skipCount--;
}
let nextNumber = currentNumber + previousNumber;
previousNumber = currentNumber;
currentNumber = nextNumber;
}
} catch(err) {
console.log(err.message); // will print ‘External throw’ on the fourth iteration.
}
}
let fibonacciSequenceGenerator = makeFibonacciSequenceGenerator(50);
console.log(fibonacciSequenceGenerator.next(1).value);
console.log(fibonacciSequenceGenerator.next(3).value);
console.log(fibonacciSequenceGenerator.next().value);
fibonacciSequenceGenerator.throw(new Error('External throw'));
console.log(fibonacciSequenceGenerator.next(1).value); // undefined will be printed since the generator is done.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment