async / await ์ ์ฌ์ฉํ ๊น?
- Promise ์ฒด์ด๋์ ์ฝ๋ฐฑ ์ง์ฅ์ ๋ฒ์ด๋๊ฒ ํ์ง๋ง, Promise ์ฒด์ด๋ ๋ํ ๊ธธ์ด์ง ๊ฒฝ์ฐ ์ฌ์ ํ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง
- ES2017์ ์ฒ์์ ๋ฑ์ฅํ async, await๋ syntactic sugar๋ก Promise ์ฌ์ฉ์ ์ข ๋ ํธ๋ฆฌํ๊ณ ์ธ๋ จ๋๊ฒ ํธ๋ฆฌํ๊ฒ ํ ์ ์๋๋ก ์ฒ๋ฆฌ
- async ํค์๋๋ ํจ์ ์์ ๋ถ์
- ํจ์ ์์ async ๋ถ๊ฒ ๋๋ฉด promise๋ฅผ ๋ฐํํ๋ค๋ ์๋ฏธ
async/ await
- ํ๋ก๋ฏธ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์
- ํ๋ก๋ฏธ์ค์ then/catch/finally ํ์ ์ฒ๋ฆฌ ๋ฉ์๋์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌํด ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ์ ์ฒ๋ฆฌํ ํ์ ์์ด ๋๊ธฐ ์ฒ๋ฆฌ์ฒ๋ผ ํ๋ก๋ฏธ์ค๋ฅผ ์ฌ์ฉ
asyncํจ์
- await ํค์๋๋ ๋ฐ๋์ async ํจ์ ๋ด๋ถ์์ ์ฌ์ฉ
- async ํจ์๋ async ํค์๋๋ฅผ ์ฌ์ฉํด ์ ์ํ๋ฉฐ ์ธ์ ๋ ํ๋ก๋ฏธ์ค ๋ฐํ
- async ํจ์๊ฐ ๋ช ์์ ์ผ๋ก ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ์ง ์๋๋ผ๋ async ํจ์๋ ์๋ฌต์ ์ผ๋ก ๋ฐํ๊ฐ์ resolve ํ๋ ํ๋ก๋ฏธ์ค ๋ฐํ
//async ํจ์ ์ ์ธ๋ฌธ
async function foo(n) {return n}
foo(1).then(v=>console.log(v)) // 1
//async ํจ์ ํํ์
const bar = async function(n) {return n}
bar(2).then(v=>console.log(v)) // 2
//async ํ์ดํ ํจ์
const baz = async n=>n
baz(3).then(v=>console.log(v)) //3
//async ๋ฉ์๋
const obj = {
async foo(n) {return n }
}
obj.foo(4).then.(v=>console.log(v)) //4
//async ํด๋์ค ๋ฉ์๋
class MyClass{
async bar(n) {return n}
}
const myClass = new MyClass()
myClass.bar(5).then(v=>console.log(v)) //5
class MyClass{
async constructor(){
//SyntaxError:Class constructor may not be an asyn method
}
const myClass = new MyClass()
await ํค์๋
- ํ๋ก๋ฏธ์ค๊ฐ settled ์ํ(๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ํ๋ ์ํ)๊ฐ ๋ ๋ ๊น์ง ๋๊ธฐ
- settled ์ํ๊ฐ ๋๋ฉด ํ๋ก๋ฏธ์ค๊ฐ resolveํ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
- await ํค์๋๋ ๋ฐ๋์ ํ๋ก๋ฏธ์ค ์์์ ์ฌ์ฉ
const fetch = require('node-fetch')
const getGithubUserName = async id => {
const res = await fetch(`https://api.github.com/users/${id}`)
const {name} = await.res.json()
cosole.log(name)
}
getGithubUserName('iseo')
Reference
async์ await async / await 1
'Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] LocalStorage์ SessionStorage (0) | 2023.01.29 |
---|---|
[JavaScript] async / await 2 (0) | 2023.01.26 |
[JavaScript] Event-onChange (0) | 2023.01.22 |
[JavaScript] Event-onFocus, onBlur (0) | 2023.01.20 |
[JavaScript] ๋น๋๊ธฐ (0) | 2023.01.17 |
๋๊ธ