明白javascript中异步编程Generator

Generator 是es6处置惩罚异步编程的一种体式格局,来看看和promise有什么差别
const myFirstPromise = new Promise((resolve, reject) => {
  //   resolve(someValue); // fulfilled
  // 或
  //   reject("failure reason"); // rejected
});
myFirstPromise.then(x=>x)  //猎取值
再来看看Generator函数 ,函数前面是一个* 然后是函数名, 函数体内里是用yield代表return 然则能够返回屡次
function* gen(){   
    yield 1
    yield 2
    return 'return'  //运用return 即不处置惩罚背面的yield
}
let b=gen();
console.log(b);  //{}  返回的是一个generator对象 
console.log(b.next()) //{ value: 1, done: false }  

Generator的写法更像是同步的语句,比promise更简约

猎取generator值的几种体式格局

1.挪用能够运用 next()猎取值

console.log(b.next()) //{ value: 1, done: false }  
console.log(b.next()) //{ value: 2, done: false }
console.log(b.next()) //{ value: 'return', done: true }  done==true示意为末了一步
function* foo(){
    yield 'a'
    yield 'b'
    yield 'c'
}

2.也能够运用for…of 猎取值

let f=foo();
for(let a of f ){
    console.log(a,'------')  
}

3.Array.from

console.log(Array.from(foo()),'-----from') //[ 'a', 'b', 'c' ] '-----from'

4.扩大运算符

console.log([...foo()]);  //[ 'a', 'b', 'c' ]

5.解构赋值

let [x,y]=foo();
console.log(x,'----x') //a
引见下generatr经常使用的一些要领,next,return,throw

1.return 要领

function* bar(a,b){
    yield '1'
    yield '2'
    yield '3'
};

var barG=bar();
console.log(barG.next())  //{ value: 3, done: false }
console.log(barG.return('foo'))  //{ value: 'foo', done: true } //return 背面都没有值
console.log(barG.next())  //{ value: undefined, done: true }

2.throw()要领

function* gen() {
    try {
        console.log('---')
        yield ;  //由于没有返回值
    } catch (e) {
        console.log('内部捕捉', e);  //走的是这里
    }
    yield console.log('end');
};

try {
    var g = gen();
    g.next()   //console.log('---')
    g.throw('a');  //先走了非常  内部捕捉 a  然则并非yield 所以继承走 打印end 
    g.throw('b');   //由于这个非常背面已没有yield 所以直接走的挪用的catch 打印的外部捕捉 b
} catch (e) { 
    console.log('外部捕捉', e);
}
Generatro不是一个组织函数,只是一个遍历对象 所以内里的this都是指向window,下面看看例子
function* gener(){
    yield this.name=1;
}
console.log(gener().next()); //{ value: 1, done: false }
console.log(gener().name)   //undefined
console.log(window.name) //1

天天提高一点,愿望人人喜好,也愿望喜好的朋侪点个赞,后续继承更新…

    原文作者:仅此而已
    原文地址: https://segmentfault.com/a/1190000014012244
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞