Async await 구현

서동수·2022년 8월 26일
0

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);
profile
devLog

0개의 댓글