Generator(异步编程解决方案)

Generator也是一种解决异步的方案。

一、generate基本定义

let t = function* () {
   yield 'a';
   yield 'b';
   return 'c';
}

let k = t();

console.log(k.next());  //  value: 'a', done: false
console.log(k.next());  //  value: 'b', done: false
console.log(k.next());  //  value: 'c', done: true
console.log(k.next());  //  value: undefined, done: true

  当我们第一次调用t()的时候,会在遇到一个yield之前停下来,当调用next()之后会执行第一个yield,以此类推。

二、generate与iterator

  我们来看这么一个例子。

let obj = {}
obj[Symbol.iterator] = function() {
    yield 1;
    yield 2;
    yield 3;
}

for (let value of obj) {
   console.log(value); //  1  2   3
}

可以看到我们用这种方法定义比上次用iterator简单了许多。

三、generate与状态机

let state = function* (){
   while(1) {
      yield 'A';
      yield 'B';
      yield 'C';
   }
}
let status = state();
console.log(status.next());
console.log(status.next());
console.log(status.next());
console.log(status.next());
console.log(status.next());
//  这样就会在A B C三个状态一直循环。

  当然了还有的就是generate的语法糖。

let state = async function (){
   while(1) {
      await 'A';
      await 'B';
      await 'C';
   }
}
let status = state();
console.log(status.next());
console.log(status.next());
console.log(status.next());
console.log(status.next());
console.log(status.next());
//  这样就会在A B C三个状态一直循环。

上面两种的结果是一样的。

你可能感兴趣的:(Generator(异步编程解决方案))