🦎 [λ”₯λ‹€μ΄λΈŒ μŠ€ν„°λ””] 45μž₯. Promise

이지·2021λ…„ 10μ›” 10일
0

DeepDive

λͺ©λ‘ 보기
8/13

1. ν”„λ‘œλ―ΈμŠ€κ°€ 무엇인지 'μƒνƒœ'λΌλŠ” ν‚€μ›Œλ“œλ₯Ό ν¬ν•¨ν•΄μ„œ μ„€λͺ…ν•΄λ³΄μ„Έμš”.

μƒμ„±λœ μ§ν›„μ˜ ν”„λ‘œλ―ΈμŠ€λŠ” 기본적으둜 pending μƒνƒœμ΄λ‹€. 이후 비동기 μ²˜λ¦¬κ°€ μˆ˜ν–‰λ˜λ©΄ 비동기 처리 결과에 따라 λ‹€μŒκ³Ό 같이 ν”„λ‘œλ―ΈμŠ€μ˜ μƒνƒœκ°€ λ³€κ²½λœλ‹€.

성곡→ resolve ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄ ν”„λ‘œλ―ΈμŠ€λ₯Ό fullfileld μƒνƒœλ‘œ λ³€κ²½
μ‹€νŒ¨β†’ reject ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄ rejected μƒνƒœλ‘œ λ³€κ²½

  • ν”„λ‘œλ―ΈμŠ€λŠ” 콜백 νŒ¨ν„΄ λ³΄μ™„ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ 문법.. μƒμ„±μž ν•¨μˆ˜λ‹€. 객체닀.

2. ν”„λ‘œλ―ΈμŠ€ 객체가 κ°–λŠ” 후속 처리 λ©”μ„œλ“œμ— λŒ€ν•΄μ„œ μ„€λͺ…ν•΄λ³΄μ„Έμš”.

ν›„μ†λ©”μ„œλ“œ then(fullfilled) . catch( rejected) , finally(ν•œ 번만..) λ“±. 비동기 처리 μƒνƒœκ°€ λ³€ν•˜λ©΄ 후속 처리 λ©”μ„œλ“œμ— 인수둜 μ „λ‹¬ν•œ μ½œλ°±ν•¨μˆ˜κ°€ μ„ νƒμ μœΌλ‘œ 호좜 됨. μ΄λ•Œ μ½œλ°±ν•¨μˆ˜μ— ν”„λ‘œλ―ΈμŠ€μ˜ κ²°κ³Όκ°€ 인수둜 μ „λ‹¬λœλ‹€. λͺ¨λ“  후속 처리 λ©”μ„œλ“œλŠ” ν”„λ‘œλ―ΈμŠ€λ₯Ό λ°˜ν™˜ν•˜λ©° λΉ„λ™κΈ°λ‘œ λ™μž‘ν•œλ‹€. promise λ₯Ό λ°˜ν™˜ν•˜κΈ°λ•Œλ¬Έμ— chaining 이 κ°€λŠ₯ν•˜λ‹€.

3.HTTP μš”μ²­μ˜ μ’…λ₯˜μ™€ μ •μ˜λ₯Ό μ„€λͺ…ν•΄λ³΄μ„Έμš”.

get, post, delete ..

patch β‡’ κ°μ²΄ν˜•νƒœκ°€ μžˆμ„λ•Œ κ·Έ μΌλΆ€λΆ„λ§Œ μˆ˜μ •ν• λ•Œ.
put β‡’ 객체λ₯Ό μ™„μ „νžˆ λŒ€μ²΄ν• λ•Œ ..

4. λ‹€μŒ μ˜ˆμ œμ—μ„œ todosκ°€ undefined둜 λ°˜ν™˜ λ˜λŠ” μ΄μœ λŠ”?

xhr의 μ΄λ²€νŠΈν•Έλ“€λŸ¬, onload λ©”μ„œλ“œκ°€ λΉ„λ™κΈ°λ‘œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 비동기 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ ν•¨μˆ˜ λ‚΄λΆ€μ˜ λΉ„λ™κΈ°λ‘œ λ™μž‘ν•˜λŠ” μ½”λ“œλ¬Έμ΄ μ™„λ£Œλ˜μ§€ μ•Šμ•˜λ”λΌλ„ 기닀리지 μ•Šκ³  μ¦‰μ‹œ μ’…λ£Œλœλ‹€. (즉, μ½œμŠ€νƒμ΄ μ¦‰μ‹œλΉ„μ›Œμ§€κ³ , νƒœμŠ€ν¬ 큐에 μ €μž₯λœλ‹€.) console.log λŠ” μ½œμŠ€νƒμ— μΆ”κ°€λ˜κ³ , 콜 μŠ€νƒμ— μžˆλŠ” μ»¨ν…μŠ€νŠΈλ“€μ΄ μ „λΆ€ 싀행이 μ™„λ£Œκ°€λ˜κ³  λΉ„μ–΄μ•Όμ§€λ§Œ(μ½œμŠ€νƒμ€ 1λ²ˆμ— 1κ°œμ”©λ§Œ 처리 κ°€λŠ₯..) 이벀트 루프에 μ˜ν•΄μ„œ 콜 μŠ€νƒμœΌλ‘œ ν‘Έμ‹œλ˜μ–΄ μ‹€ν–‰λ˜λ―€λ‘œ getν•¨μˆ˜λ‘œ 데이터λ₯Ό μ—…λ°μ΄νŠΈν•˜κΈ° 전에 console.log(todos)κ°€ μ‹€ν–‰λ˜μ–΄ undefinedκ°€ 좜λ ₯되게 λœλ‹€. console.logκ°€ μ°νžˆλŠ” μ‹œμ λ³΄λ‹€ λ¨Όμ € μ„œλ²„μ—μ„œ 값을 전솑받아도, λ§ˆμ°¬κ°€μ§€λ‘œ λ™μž‘ν•œλ‹€.

getν•¨μˆ˜ 호좜 β†’ 이벀트 ν•Έλ“€λŸ¬ νƒœμŠ€ν¬ 큐 이동 β†’ ν•¨μˆ˜ μ’…λ£Œ β†’ 이후 μ½”λ“œλ¬Έ 처리 β†’ νƒœμŠ€ν¬ 큐에 μ΄λ²€νŠΈκ°€ 콜 μŠ€νƒμœΌλ‘œ 이동 β†’ 이벀트 μ½”λ“œ μ‹€ν–‰ (?)

5.λ‹€μŒ 비동기 콜백 νŒ¨ν„΄μ—μ„œ μ—λŸ¬λ₯Ό 핸듀링 ν•˜κΈ° μ–΄λ €μš΄ μ΄μœ λŠ”?

μ—λŸ¬λŠ” 호좜자 λ°©ν–₯으둜 μ „νŒŒλ˜λŠ”λ° setTimeout은 비동기 ν•¨μˆ˜λ‘œ ν•΄λ‹Ή ν•¨μˆ˜κ°€ 호좜됨과 μ¦‰μ‹œμ— μ’…λ£Œλ˜λ©΄μ„œ 콜 μŠ€νƒμ—μ„œ μ œκ±°λœλ‹€. 콜백 ν•¨μˆ˜λŠ” νƒœμŠ€ν¬νμ— μ €μž₯λ˜μ—ˆλ‹€κ°€ 콜 μŠ€νƒμ΄ λΉ„λ©΄ 이벀트 루프에 μ˜ν•΄μ„œ μ‹€ν–‰λ˜λŠ”λ° 이 λ•Œ 콜백 ν•¨μˆ˜μ˜ μ‹€ν–‰ μ»¨νƒμŠ€νŠΈμΈ ν•˜μœ„ μ»¨νƒμŠ€νŠΈμ— 아무것도 μ—†κΈ° λ•Œλ¬Έμ— ν˜ΈμΆœμžκ°€ μ—†λŠ”κ±Έλ‘œ μΈμ‹λ˜μ–΄ catch λΈ”λ‘μ—μ„œ μ •μƒμ μœΌλ‘œ μ—λŸ¬κ°€ μž‘νžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€.

6. promise.all 을 μ‚¬μš©ν•΄μ„œ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ‹œμ˜€

//resolveλΌλŠ” 이름을 λ‹€λ₯Έκ±Έλ‘œ λ°”κΎΈλ©΄ error λ°œμƒ
const req1 = () =>
new Promise(resolve => setTimeout(()=>resolve(1),1000));
const req2 = () =>
new Promise(resolve => setTimeout(()=>resolve(2),2000));
const req3 = () =>
new Promise(resolve => setTimeout(()=>resolve(3),3000));

//const μ„ μ–Έμ‹œ λ³€μˆ˜ κ°’ μž¬ν• λ‹Ή λΆˆκ°€
let resonse = [];
req1()
  .then(data => {
    resonse.push(data);
    return req2();
  })
  .then(data => {
    resonse.push(data);
    return req3();
  })
  .then(data => {
    resonse.push(data);
    console.log(res);
  })
  .catch(console.error);
let resonse = [];

Promise.all([req1(), req2(), req3()])
  .then(result => resonse = result)
  .catch(console.error);
profile
μ΄μ§€ν”Όμ§€λ ˆλͺ¬μŠ€ν€΄μ§€πŸ‹

0개의 λŒ“κΈ€