작성
·
222
0
function* test() {
yield 1;
yield 2;
}
===============
const gen = test()
===============
gen.next()
{
"value": 1,
"done": false
}
보통 제너레이터 함수를 설명할때, 개발자 도구에서 이런식으로 설명을 많이 하는것같은데...
설명만 보면 yield 구문실행을 위해선, next() 라는 함수를 사용해야된다는건 알겠습니다..
근데 실제코드에서는 next() 함수를 실행하지않는데, 어떻게 yield 구문들이 실행되는지 이해가 안됩니다..
답변 1
0
어떤 이펙트로 호출하냐는 건 무슨 말씀이신지 잘 모르겠습니다.
이펙트가 종료되어서 다음 줄로 넘어가야 할 때 saga가 알아서 next를 호출해줍니다. 모든 이펙트에서 다 next를 호출합니다.
아 이펙트라고 적은것은 saga/effects 입니다. 말씀하신대로라면
saga에서 take로 action이 발생되는것을 기다리고있다가, action이 발생이되면 연결시켜놨던 함수를 실행시키는거고, 그안의 yield들은 자동으로 사가가 next를 호출한다는 말씀이실까요?
모든 이펙트라고 하면 put , call , fork , take등등 모든걸 말씀하시는걸까요?
말씀대로라면 어차피 동기식(fork제외)으로 다 실행될꺼 굳이 제너레이터 함수를 쓰는이유는 무엇인지 알수있을까요...?ㅠ 너무 무지해서 꼬치꼬치 묻는게 너무 죄송하네요.
네 맞습니다.
네 맞습니다. yield가 붙는 모든 것들에 해당합니다.
fork 제외가 동기라고 생각하시면 안 됩니다. call도 비동기입니다. 다만 yield가 비동기 call이 끝나고 next를 해주는 것이죠. fork는 비동기함수가 끝나기 전에 next를 해주는 것이고요. 대부분의 이펙트가 비동기라서 제너레이터로 컨트롤하는 겁니다. 제너레이터는 또한 중간에 취소할 수 있어서 좋거든요.
답변 감사합니다. 그럼 리덕스 사가에서 어떤 이펙트로 호출해주는지 알수있을까요? 사가에서 호출한다면 take관련 명령어 인거같긴한데..yield 구문을 만날때마다 호출을 해주는건지..어떤식으로 호출하는지 알수 있을까요?