Dva: ํšจ๊ณผ๊ฐ€ ๋น„๋™๊ธฐ/๋Œ€๊ธฐ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2018๋…„ 10์›” 08์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dvajs/dva

์ œ๋ชฉ์œผ๋กœ

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Generator ๊ฐ•๋ ฅํ•˜๋‹ค๋Š” ๋ง์€ goto ๋” ๊ฐ•๋ ฅํ•˜๋‹ค๊ณ  ๋ถˆํ‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ณณ์œผ๋กœ ์ ํ”„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  9 ๋Œ“๊ธ€

์•„๋‹ˆ์š”, dva๋Š” redux-saga๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. redux-saga๋Š” Generator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšจ๊ณผ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ๋‹ต๋ณ€์„ ์ฐธ์กฐํ•˜์„ธ์š”.

https://github.com/redux-saga/redux-saga/issues/987#issuecomment -301039792

๋‹˜์ด ์˜ฌ๋ ค์ฃผ์‹  ์ด์Šˆ๋ฅผ ์ด์ œ์„œ์•ผ ์ฝ์—ˆ๋„ค์š”..์‰ฝ๊ฒŒ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด redux-saga ์ž‘์„ฑ์ž๊ฐ€ ๋„ˆ๋ฌด ๊ฒŒ์œผ๋ฅด๊ฒŒ ์ˆ˜์ •์„ ํ–ˆ๋„ค์š” ํ•˜ํ•˜

์ €๋„ ๊ถ๊ธˆํ•œ๊ฒŒ ์žˆ์–ด์„œ dva ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ ํšจ๊ณผ๊ฐ์ฒด์˜ ๅ‡ฝๆ•ฐ ๋Š” ์™ธ๋ถ€์‹คํ–‰์„ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š”๊ฒƒ์œผ๋กœ ์‚ฌ์–‘์— ๋งž๊ฒŒ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค ์™ธ๋ถ€๋Š” Generator ๋กœ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค next() ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ฝ”๋“œ๋Š” ์—ฌ์ „ํžˆ ๋งค์šฐ ์‹ ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋‹˜์ด ์˜ฌ๋ ค์ฃผ์‹  ์ด์Šˆ๋ฅผ ์ด์ œ์„œ์•ผ ์ฝ์—ˆ๋„ค์š”..์‰ฝ๊ฒŒ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด redux-saga ์ž‘์„ฑ์ž๊ฐ€ ๋„ˆ๋ฌด ๊ฒŒ์œผ๋ฅด๊ฒŒ ์ˆ˜์ •์„ ํ–ˆ๋„ค์š” ํ•˜ํ•˜

์žฌ๋ฏธ ์žˆ๊ณ  ๋น„๋™๊ธฐ์ ์ด๋ฉฐ ์ œ์–ด ๋น„๋™๊ธฐ๋Š” ์ƒ์„ฑ๊ธฐ ๊ธฐ๋Šฅ๋ณด๋‹ค ํ›จ์”ฌ ๋œ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, dva๋Š” redux-saga๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. redux-saga๋Š” Generator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšจ๊ณผ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ๋‹ต๋ณ€์„ ์ฐธ์กฐํ•˜์„ธ์š”.

redux-saga/redux-saga#987 (์ฝ”๋ฉ˜ํŠธ)

์ด ๋ฌธ์ œ๋Š” ์ƒ์„ฑ๊ธฐ๊ฐ€ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋ฅผ ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. @xiaosongxiaosong

async๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด await๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ? (์งˆ๋ฌธ์ด ์˜ค๋žœ๋งŒ์ด๋‹ค. ์•„๋ฌด๋„ ๋…ผ์˜ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ธ๊ฐ€?)

@951565664

async, await control asynchrony๋Š” ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ๊ธฐ๋Šฅ๋ณด๋‹ค ํ›จ์”ฌ ๋œ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.

BengBu-YueZhang์€ ์ด๋ฏธ ์ด ๋ฌธ์ œ์˜ ๋ณธ์งˆ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.์ œ๋„ˆ๋ ˆ์ดํ„ฐ์— ๋Œ€ํ•œ ๋‚˜์˜ ์ดํ•ด๋Š” ๊ทธ๋‹ค์ง€ ์ฒ ์ €ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.๋‚ด ์–•์€ ์ดํ•ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. Generator ํ•จ์ˆ˜ ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ๋ฐฉ๋ฌธ์ž ๊ฐœ์ฒด ๋ฅผ ํ˜ธ์ถœ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ž ๊ฐœ์ฒด ์ƒ์„ฑ๊ธฐ๋Š” ๋ณต๊ตฌ ๊ตฌํ˜„์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ๋ณต๊ตฌ ์‹œ ๊ฐ’ ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. async ํ•จ์ˆ˜ ๋Š” Generator ํ•จ์ˆ˜์˜ ๊ตฌ๋ฌธ ์„คํƒ•์ž…๋‹ˆ๋‹ค. ๋‚ด์žฅ ์‹คํ–‰๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ธ์ถœ ํ›„ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜์–ด ์ตœ์ข… ๊ตฌ์กฐ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ถœ์ž๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ์ผ์‹œ ์ค‘์ง€ ๋ฐ ์žฌ๊ฐœ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋น„๋™๊ธฐ ํ•จ์ˆ˜์— ๊ฐ’์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.

ECMAScript 6 ์‹œ์ž‘ํ•˜๊ธฐ ์ƒ์„ฑ๊ธฐ ์žฅ์—๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋” ์œ ์šฉํ•œ ๋‘ ๊ฐœ์˜ ๋‹จ๋ฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

yield ํ‘œํ˜„์‹ ์ž์ฒด๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ํ•ญ์ƒ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. next ๋ฉ”์†Œ๋“œ๋Š” ์ด์ „ yield ํ‘œํ˜„์‹์˜ ๋ฆฌํ„ด ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋Š” ์ผ์‹œ ์ •์ง€ ์ƒํƒœ์—์„œ ์‹คํ–‰์„ ์žฌ๊ฐœํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…์ŠคํŠธ ์ƒํƒœ(์ปจํ…์ŠคํŠธ)๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด Generator ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์„ ์‹œ์ž‘ํ•œ ํ›„์—๋„ ๊ณ„์†ํ•ด์„œ ํ•จ์ˆ˜ ๋ณธ๋ฌธ์— ๊ฐ’์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜์˜ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์—์„œ ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ์ฃผ์ž…ํ•˜์—ฌ ํ•จ์ˆ˜์˜ ๋™์ž‘์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Generator ๊ฐ•๋ ฅํ•˜๋‹ค๋Š” ๋ง์€ goto ๋” ๊ฐ•๋ ฅํ•˜๋‹ค๊ณ  ๋ถˆํ‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ณณ์œผ๋กœ ์ ํ”„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹˜์ด ์˜ฌ๋ ค์ฃผ์‹  ์ด์Šˆ๋ฅผ ์ด์ œ์„œ์•ผ ์ฝ์—ˆ๋„ค์š”..์‰ฝ๊ฒŒ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด redux-saga ์ž‘์„ฑ์ž๊ฐ€ ๋„ˆ๋ฌด ๊ฒŒ์œผ๋ฅด๊ฒŒ ์ˆ˜์ •์„ ํ–ˆ๋„ค์š” ํ•˜ํ•˜

์žฌ๋ฏธ ์žˆ๊ณ  ๋น„๋™๊ธฐ์ ์ด๋ฉฐ ์ œ์–ด ๋น„๋™๊ธฐ๋Š” ์ƒ์„ฑ๊ธฐ ๊ธฐ๋Šฅ๋ณด๋‹ค ํ›จ์”ฌ ๋œ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.

JS ์–ธ์–ด๊ฐ€ C ์–ธ์–ด๋ณด๋‹ค ํ›จ์”ฌ ๋œ ๊ฐ•๋ ฅํ•˜๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰