function* gen() {
let ask1 = yield "2 + 2 = ?";
alert(ask1); // 4
let ask2 = yield "3 * 3 = ?"
alert(ask2); // 9
}
let generator = gen();
alert( generator.next().value ); // "2 + 2 = ?"
alert( generator.next(4).value ); // "3 * 3 = ?"
alert( generator.next(9).done ); // true
// without generator
const infiniteFibonacci = (function () {
let [pre, cur] = [0, 1];
return {
[Symbol.iterator]() {
return this;
},
next() {
[pre, cur] = [cur, pre + cur];
return { value: cur };
},
};
})();
for (const num of infiniteFibonacci) {
if (num > 10000) break;
console.log(num);
}
const infiniteFibonacci = (function* () {
let [pre, cur] = [0, 1];
while (true) {
[pre, cur] = [cur, pre + cur];
yield cur;
}
})();
for (const num of infiniteFibonacci) {
if (num > 10000) break;
console.log(num);
}
// const fetch = require("node-fetch"); // for Node.js environment
const async = generatorFunc => {
const generator = generatorFunc();
const onResolved = arg => {
const result = generator.next(arg);
return result.done
? result.value
: result.value.then(res => onResolved(res));
};
return onResolved;
};
async(function* fetchTOdo() {
const URL = "https://jsonplaceholder.typicode.com/todos/1";
const response = yield fetch(URL);
const todo = yield response.json();
console.log(todo);
})();
// const fetch = require("node-fetch"); // for Node.js environment
async function fetchTodo() {
const URL = "https://jsonplaceholder.typicode.com/todos/1";
const response = await fetch(URL);
const todo = await response.json();
console.log(todo);
}
제너레이터와 비동기 이터레이션 - 모던 javascript 튜토리얼
[책] 자바스크립트DeepDive - 이웅모 저