---
type: snippet
tags: ['javascript', 'monad', 'promise']
status: release
ctime: 2025-01-01
mtime: 2025-01-01
---

콜백 → Promise → async/await

```javascript
// 콜백
fetchData(() => {
  processData(() => {
    displayData()
  })
})

// Promise 체인
fetchData().then(processData).then(displayData)

// async/await
async function main() {
  const data = await fetchData()
  const processed = await processData(data)
  await displayData(processed)
}
```

Promise는 모나드처럼 동작 - `then`이 bind/flatMap 역할

- **map**: 값 변환 (중첩 허용)
- **flatMap**: 값 변환 + 평탄화 (Promise의 then)
