ES6 generator 상태 기 요점 기록

throw 방법
try, catch () 내부 오 류 를 캡 처 한 후 next () 를 한 번 더 실행 합 니 다.
var gen = function* gen(){
try {
yield console.log('a');
} catch (e) {
// ...
}
yield console.log('b');
yield console.log('c');
}
var g = gen();
g.next() // a
g.throw() // b
g.next() // c

return 조기 종료
try {} finally () {} 구문 에서 try {} 에서 return 하면 finally 가 늦 어 집 니 다.
문법
yield [1,2,3,4,5,6]         ;
yield* [1,2,3,4,5,6]   123456(     )
yield 'hello'          ;
yield* [1,2,3,4,5,6]       (     )  

function* foo(){
    yield 2;
    yield 3;
    yield 'foo';//return 'foo';      
}
function* bar(){
    yield 1;
    var v = yield *foo();
    console.log('v: '+v);
    return 4;
}
var it = bar();
console.log(it.next())
console.log(it.next())
console.log(it.next())
console.log(it.next())
console.log(it.next())

generator 함 수 는 구조 함수 가 아니 라 변통 할 수 있 습 니 다. this 속성 도 있 고 next 방법 도 있 습 니 다.
function* gen(){yield this.a = 1;}
function F(gen){return gen.call(gen.prototype)
var f = new F(gen)
f.next()
console.log(f)

async generator 문법 사탕
  function gen(a){
    let gen = (function* (){
        var a = yield promise(22)
        console.log(a)
        var b = yield promise(44)
        console.log(b)
    })();

    return new Promise((resolve,reject)=>{//   
        callNextStep(a)
        function callNextStep(res) {
          let result;
          try {  //  generator      
            Promise.resolve(res).then((data)=>{
                result = gen.next(data);
                next(result);
            }).catch(e=>{  //  yield  promise    
              return reject(e);
            })
          } catch (e) {
              return reject(e);
          }
        }
        function next({done,value}) {
            if(done){
                resolve(value)
            }else{
                callNextStep(value)
            }

        }
    })
}
gen().catch((e)=>{
    console.log('   ',e)
})

좋은 웹페이지 즐겨찾기