JavaScript
TIL : JavaScript { Generator }
ted k
2021. 11. 6. 09:41
Generator
- 원하는 만큼 코드 실행을 시작하거나 중지하는 함수 ( 쓰레드 처럼 이용하고 싶은건가...? )
- 비동기 코드와 작성하면 효과적!!
용례
- function 키워드에 * 을 붙여주고
- 반환할 콘텐츠에 yeild를 불여주고
- next() 로 실행!
- 콘텐츠를 전부 호출한 이후에 재실행하면 undefined 와 done: true 반환!
- return을 사용해 값을 전달 후 함수를 종료할 수 있다.
- throw를 사용해 오류를 잡고 함수 종료!
Promise와 함께 사용하면 효과적이다!!
const myPromise = () => new Promise((resolve) => {
resolve('our value is...')
})
function* gen() {
let result = ""
// 프로미스를 반환
yield myPromise().then(data => {result = data})
// 프로미스의 결과를 기다린 후 이 값을 사용
yield result + ' 2'
}
// 비동기 함수를 호출
const asyncFunc = gen()
const val1 = asyncFunc.next()
console.log(val1)
// { value: Promise, done: false }
// 프로미스가 완료되기를 기다린 후 .next()를 호출
val1.value.then(() => {
console.log(asyncFunc.next())
})
// {value: "our value is ...2", done: false}