ES6 Builder Builder 애플리케이션 -- 비동기식 작업 제어
9458 단어 ES6/ES7
생성기(Generator)
함수 키워드 뒤에 놓거나 함수 이름 앞에 놓기
function *metod() {
}
function* metod() {
}
{
* metod() {
}
}
// ,
생성기 함수 내부는 생성기의 매번 교체에 대한 데이터를 제공하기 위한 것이다
매번 생성기의next 방법을 호출하면 생성기 함수를 다음 yield 키워드 위치로 실행합니다
ield는 하나의 키입니다. 이 키는 생성기 함수 내부에서만 사용할 수 있으며, '생성' 의 교체 데이터를 나타냅니다.
1). 생성기 함수에는 되돌아오는 값이 있고, 되돌아오는 값은 처음done가true일 때의value 속성에 나타납니다.생성기의next 방법을 호출할 때 파라미터를 전달할 수 있으며 전달된 파라미터는yield표현식의 반환값 3)에 전달됩니다.처음 넥스트 방법을 호출했을 때, 전참은 아무런 의미가 없었다.생성기 함수 내부에서 다른 생성기 함수를 호출할 수 있지만 * 번호를 붙이는 것을 주의해야 한다
function* t1(){
yield "a"
yield "b"
}
function* test() {
yield* t1();
yield 1;
yield 2;
yield 3;
}
const generator = test();
function* task() {
const d = yield 1;
console.log(d)
// //d : 1
const resp = yield fetch("http://101.132.72.36:5100/api/local")
const result = yield resp.json();
console.log(result);
}
run(task)
function run(generatorFunc) {
const generator = generatorFunc();
let result = generator.next(); // ( ),
handleResult();
// result
function handleResult() {
if (result.done) {
return; // ,
}
// ,
//1. Promise
//2.
if (typeof result.value.then === "function") {
//1. Promise
// Promise ,
result.value.then(data => {
result = generator.next(data)
handleResult();
})
} else {
//2. ,
result = generator.next(result.value)
handleResult();
}
}
}