Async await 구현
기존 함수
const timeout = (time) => {
return new Promise((resolve) => {
setTimeout(() => {
console.log("setTimeout Log", time);
resolve(time + 3000);
}, time);
});
};
async function afunc() {
const resultA = await timeout(1000);
console.log("timeout(1000)의 결과 resultA::::", resultA);
const resultB = await timeout(resultA);
console.log("timeout(resultA)의 결과 resultB::::", resultB);
}
afunc();
// 결과
// setTimeout Log 1000
// timeout(1000)의 결과 resultA:::: 4000
// setTimeout Log 4000
// timeout(resultA)의 결과 resultB:::: 7000
//
Promise, Generator로 구현
const timeout = (time) => {
return new Promise((resolve) => {
setTimeout(() => {
console.log("setTimeout Log", time);
resolve(time + 3000);
}, time);
});
};
function* callbackGenerator() {
const resultA = yield timeout(1000);
console.log("timeout(1000)의 결과 resultA::::", resultA);
const resultB = yield timeout(resultA);
console.log("timeout(resultA)의 결과 resultB::::", resultB);
}
function run (generator) {
const gen = generator();
const next = (query) => {
const res = gen.next(query);
if (!res.done) {
res.value.then(next);
} else {
return true;
}
};
next();
}
run(callbackGenerator);