Skip to content

Instantly share code, notes, and snippets.

async function* makeFibonacciSequenceGenerator(endIndex = Infinity) {
let previousNumber = 0;
let currentNumber = 1;
for (let currentIndex = 0; currentIndex < endIndex; currentIndex++) {
await new Promise(resolve => setTimeout(resolve, 1000)); // a simple timeout as an example.
yield currentNumber;
let nextNumber = currentNumber + previousNumber;
previousNumber = currentNumber;
currentNumber = nextNumber;
let fibonacciSequenceGenerator = makeFibonacciSequenceGenerator(50);
console.log(fibonacciSequenceGenerator.next().value); // 1
console.log(fibonacciSequenceGenerator.next(3).value); // 5
console.log(fibonacciSequenceGenerator.next().value); // 8
console.log(fibonacciSequenceGenerator.return(374).value); // 374
console.log(fibonacciSequenceGenerator.next(1).value); // undefined
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;
function* makeFibonacciSequenceGenerator(endIndex = Infinity) {
let previousNumber = 0;
let currentNumber = 1;
let skipCount = 0;
for (let currentIndex = 0; currentIndex < endIndex; currentIndex++) {
if (skipCount === 0) {
skipCount = yield currentNumber; // skipCount is the parameter passed through the invocation of `fibonacciSequenceGenerator.next(value)` below.
skipCount = skipCount === undefined ? 0 : skipCount; // makes sure that there is an input
} else if (skipCount > 0){
function* makeFibonacciSequenceGenerator(endIndex = Infinity) {
let previousNumber = 0;
let currentNumber = 1;
for (let currentIndex = 0; currentIndex < endIndex; currentIndex++) {
yield currentNumber;
let nextNumber = currentNumber + previousNumber;
previousNumber = currentNumber;
currentNumber = nextNumber;
}
let fibonacciSequenceIterator = makeFibonacciSequenceIterator(5);
for (let x of fibonacciSequenceIterator) {
console.log(x); //1 1 2 3 5 8
}
function makeFibonacciSequenceIterator(endIndex = Infinity) {
let currentIndex = 0;
let previousNumber = 0;
let currentNumber = 1;
let iterator = {};
iterator[Symbol.iterator] = () => {
return {
next: () => {
if (currentIndex >= endIndex) {
let fibonacciSequenceIterator = makeFibonacciSequenceIterator(5);
for (let x of fibonacciSequenceIterator) {
console.log(x);
}
let fibonacciSequenceIterator = makeFibonacciSequenceIterator(5); // Generates the first 5 numbers.
let result = fibonacciSequenceIterator.next();
while (!result.done) {
console.log(result.value); // 1 1 2 3 5 8
result = fibonacciSequenceIterator.next();
}
function makeFibonacciSequenceIterator(endIndex = Infinity) {
let currentIndex = 0;
let previousNumber = 0;
let currentNumber = 1;
return {
next: () => {
if (currentIndex >= endIndex) {
return { value: currentNumber, done: true };
}