From 3c0b8bcca54be4a9c8381d1ee3b4615f7c50c0ea Mon Sep 17 00:00:00 2001 From: hyesung oh Date: Thu, 21 Nov 2024 09:12:50 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B1=95=ED=84=B0=209=20(#70)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\230\244\355\230\234\354\204\261.md" | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 "\354\261\225\355\204\260_9/\354\230\244\355\230\234\354\204\261.md" diff --git "a/\354\261\225\355\204\260_9/\354\230\244\355\230\234\354\204\261.md" "b/\354\261\225\355\204\260_9/\354\230\244\355\230\234\354\204\261.md" new file mode 100644 index 0000000..d1edbac --- /dev/null +++ "b/\354\261\225\355\204\260_9/\354\230\244\355\230\234\354\204\261.md" @@ -0,0 +1,67 @@ +# 비동기 프로그래밍 패턴 + +> 저를 포함해 다 아시는 문법들을 알려주는 챕터였다고 생각됨 + +- 비동기 코드를 마치 동기 코드처럼 보이도록 작성할 수 있어 코드의 가독성과 이해도가 높아진다 + - async/await 문법의 이유 + +> 어싱크 어웨잇의 처음은 F#이라는 언어라네요 +> 이후에 C#, 파이썬, 타입스크립트, 자바스크립트 순으로 도입되었대요 + +## 비동기 반복 + +- for await of + +```js +async function* repeat() { + yield 'Hello'; + yield 'World'; +} + +async function main() { + for await (const word of repeat()) { + console.log(word); + } +} +``` + +## 재시도 + +```js +async function retry() { + let attempt = 0; + + while (attempt < 3) { + try { + return await fetch('https://api.github.com'); + } catch (err) { + attempt++; + } + } + + throw new Error('Failed to fetch'); +} +``` + +## 데코레이터 + +```js +const asyncLogger = (fn) => { + return async function(...args) { + console.log('Start: ', fn.name); + const result = await fn(...args); + console.log('End: ', fn.name); + return result; + }; +}; + +const main = asyncLogger(async function main() { + return await new Promise(resolve => setTimeout(() => resolve('user'), 1000)); +}); + +main(); +``` + +> 책에서 나오는 `@asyncLogger` 데코레이터는 안됨 ㅋㅋㅋ 왜 적어둔거야 +> > 자바스크립트에서의 데코레이터는 현재 스테이지 3 +> > https://github.com/tc39/proposal-decorator-metadata