Iterators

In JavaScript an iterator is an object that provides a next() method which returns the next item in the sequence.

String, Array, TypedArray, Map and Set are all built-in iterables, because the prototype objects of them all have a Symbol.iterator method.

1
2
3
4
5
6
7
let myArray = [1,2];
let iterator = myArray[Symbol.iterator]();
console.log(iterator.next()); // { done: false, value: 1 }
console.log(iterator.next()); // { done: false, value: 2 }
console.log(iterator.next()); // { done: true, value: undefined }

Generators

A generator is a special type of function that works as a factory for iterators. A function becomes a generator if it contains one or more yield expressions and if it uses the function* syntax.

1
2
3
4
5
6
7
8
9
10
function* generator() {
yield 1;
yield 2;
}
let iterator = generator();
console.log(iterator.next()); // { done: false, value: 1 }
console.log(iterator.next()); // { done: false, value: 2 }
console.log(iterator.next()); // { done: true, value: undefined }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function* generator() {
yield 1;
yield* anotherGenerator();
yield 3;
}
function* anotherGenerator() {
yield 2;
}
let iterator = generator();
console.log(iterator.next()); // { done: false, value: 1 }
console.log(iterator.next()); // { done: false, value: 2 }
console.log(iterator.next()); // { done: false, value: 3 }
console.log(iterator.next()); // { done: true, value: undefined }

Örnek Kullanım

1
2
3
4
5
6
7
8
9
10
11
12
13
function request(url) {
return new Promise(function(resolve, reject) {
makeAjaxCall(url, function(err, text) {
if (err) reject(err);
else resolve(text);
});
});
}
function* generator(url) {
yield request(url1);
yield request(url2); // This can be run after promise from url1 resolved or rejected
}