[ 비동기 상황에서의 Lazy, Strict 기법이 혼합된 평가 ] 에 대한 이해
528
投稿した質問数 8
안녕하세요 11:45초 경의 payment를 평가하는 과정에서 발행하는 과정을 제가 이해한대로 정리해 보았는데 틀린 부분이 있는지 궁금합니다.
go() 를 통해 함수들을 연달아 수행하게 한다.
그 내부에는 L.range, L.map, L.takeUntil, _.flat이 들어가 있다.
L.range, L.map, L.takeUntil은 모두 Lazy 함수이므로, 제너레이터를 생성한다. 즉, next()로 값을 요구하기 전까지는 리턴하는 값이 없다.
_.flat()은 Lazy 함수가 아닌 일반 함수이다. 따라서 리턴값을 내 놓기 위해 리턴에 해당하는 배열을 모두 채워야 한다.
flat이 값을 채우기 위해 takeUntil에 next()를 요청한다.
takeUntil은 flat에서 주기 위한 값을 만들기 위해 map 에 next()를 요청함.
map도 마찬가지로 range에 next 요청
range는 next()를 통해 1을 반환한다.
map은 받은 1을 가지고 Impt.getPayments를 실행시키고, 반환되는 promise를 takeUntil에 넘김
takeUntil은 받은 프로미스를 해결되면 조건식에 넣어서 판단할 것이라는 새로운 프로미스를 생성하여 리턴값으로 반환함.
flat은 takeUntil로 부터 받은 프로미스가 해결되면 그 값을 자신의 결과 배열에 넣을 것이라는 프로미스를 생성하여 반환함.
(* 이때 console.log를 찍게되면, 여기서 반환되는 프로미스가 출력되는 것 )잠시후에 프로미스 체인에 연결된 모든 프로미스가 resolve 되고, resolve 된 값은 flat의 결과 배열에 넣어짐. 끝나지 않은 상태이므로 flat은 takeUntil에 또 값을 요청함 ( flat 에서 해결된 프로미스는 (끝나지 않았을 경우) 다시 프로미스를 반환함. 즉, flat이 어떤 조건을 만족해서 더 받아오는 것이 끝나야 비로소 promise가 완전히 resolve 되고, 비로소 res를 리턴할 수 있음 - (* flat~takeAll~take 이므로 FxJS/Strict/take.js 코드 참조 )
6~12 번의 반복
flat이 takeUntil에 값을 요청했는데, takeUntil이 조건문을 만족하지 못하는 값을 받은적이 있어 false로 마감되었음. 따라서 next()를 해도 반환되지 못하고, 상태는 done임.
flat은 더이상 받을 값이 없으므로, 최종 프로미스가 resolve 되고 그 동안 받아서 정리해온 배열을 리턴값으로 반환함
回答 1
0
안녕하세요, 인프런 AI 인턴이에요.
yus님의 글을 읽어보니, 제너레이터 함수와 비동기 함수의 혼합된 상황에서의 평가과정에 대한 이해를 공부하고 계신 것 같아요.
제너레이터 함수와 비동기 함수를 혼합하여 사용하는 경우, 각 함수의 특징에 따라 리턴값을 반환하는 원리가 다르기 때문에 복잡한 로직이 도입될 수 있습니다.
yus님의 설명에서 이해하기 어려운 부분은 없어보입니다. 하지만 제가 파악하기에도 부정확하거나, 불완전한 부분은 없는 것 같아요.
추가적으로 궁금하신 내용이 있으시다면 다시 질문해주세요. 감사합니다.
이미지 동시성 다루기
0
116
2
클로저와 같은 함수형 프로그래밍 공부
0
192
2
fx.js
0
439
2
fxjs 라이브러리 takeL 관련하여 질문드립니다.
0
344
2
input값이 이터러블 함에도 range를 쓴 이유가 궁금합니다.
0
468
1
질문있습니다!
1
372
2
DB Insert관련
0
657
2
강의에 대한 제언
2
599
1
DOM 조작 관련 질문입니다.
0
408
1
L.map, L.filter
0
613
1
indexBy 함수에 대한질문입니다.
0
404
2
해당 강의를 듣고 나면
0
397
1
내용없음
0
236
1
함수 추출에 대한 고민
1
286
1
뷰 포트에 보이는 엘리먼트만 이미지 로드하고 싶을 때
1
327
1
기존에 반복문이 1개 돌던거를 이렇게하면 2번 도는데...
0
242
1
array in object... 는 어떤 식으로 재귀가 가능할까요..?
0
271
1
queryToObject 질문드립니다.
0
359
1
재귀는 어떻게 표현할 수 있을까요?
0
315
1
모든 명령형 => 함수형 가능한가요?
0
323
1
명령형 => 함수형 변환
0
340
2
이해한게 맞을까요?
0
215
1
iter의 개별 elements 에 data 를 삽입 또는 변형해서 삽입하는 경우엔 map 으로 제어를 하는게 맞을까요?
0
263
2
FP, 실무에서의 모습은 대략적으로 어떤 모습일까요?
0
359
1

