Last active
July 1, 2021 08:49
-
-
Save sorie/94ff1fe03f9914993be48252576eb795 to your computer and use it in GitHub Desktop.
async/await 와 Promise#then
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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