Skip to content

Instantly share code, notes, and snippets.

@sorie
Last active July 1, 2021 08:49
Show Gist options
  • Save sorie/94ff1fe03f9914993be48252576eb795 to your computer and use it in GitHub Desktop.
Save sorie/94ff1fe03f9914993be48252576eb795 to your computer and use it in GitHub Desktop.
async/await 와 Promise#then
async function getApple() {
await delay(1000);
return '사과';
}
async function getBanana() {
await delay(1000);
return '바나나';
}
async function pickFruits() {
const applePromise = getApple();//프로미스생성
const bananaPromise = getBanana();
const apple = await applePromise;
const banana = await bananaPromise;
return `${apple} + ${banana}`;
}
pickFruits().then (console.log);
//전체 소요시간 1초만 걸립니다.
//사과 + 바나나 출력
//대채 useful Promise APIs
function pickAllFruits() {
return Promise.all([getApple(), getBanana()])
.then(fruits => fruits.join(' + ')
);
}
pickAllFuits().then(console.log);//사과 + 바나나 출력
function pickOnlyOne(){
return Promise.race([getApple(), getBanana()]);
}
pickOnlyone().then(console.log);//바나나만 출력됨.
// Referring to Ellie's Code
/**
await 와 Promise#then을 혼동하지 마세요
sequentialStart 에서, 첫 번째 await는 2초의 대기 시간을 갖고, 
다시 두 번째 await에서 1초의 대기 시간을 갖습니다.
두 번째 타이머는 첫 번째 타이머가 완료될 때 까지 생성되지 않습니다.
concurrentStart 에서, 두 타이머 모두 생성 된 다음 await 합니다.
타이머가 동시에 실행되고 있지만, await 호출은 여전히 연속적 실행중이므로,
두 번째 await 는 첫 번째 호출이 끝날 때 까지 대기합니다.
이렇게하면 3초가 아니라, 가장 느린 타이머에 필요한 2초가 필요합니다. 
stillConcurrent 에서도 Promise.all 을 사용하여 같은 일이 발생합니다.
두 개 이상의 프러미스를 동시에 wait 하고 싶다면, Promise#then을 사용하여 예제와 같이 parallel 를 수행할 수 있습니다.
Reference document : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/async_function
**/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment