美文网首页
es6的generator解决异步编程

es6的generator解决异步编程

作者: 悦者生存 | 来源:发表于2018-07-23 17:08 被阅读14次

generator是es6推出的解决异步编程的方法之一

1.generator的作用:通过yield可以让函数的执行流程挂起,极大地方便了改变执行流程

2.generator的简单使用和理解

创建Generator函数(就是可以挂起,暂停执行的函数,特点是function后面有一个*)

function* gen(x){
  var y = yield x + 2;
  return y;
}

下面就开始调用,调用的时候使用next()函数

next方法会执行函数体,直到遇到第一个yield语句,然后挂起函数执行,等待后续调用。但是next会返回一个对象,这个对象有2个key其中value表示yield语句后面的表达式的值,done是个布尔值,表示函数体是否已经执行结束。再次调用g。next时,执行流在挂起的地方继续执行,直到遇到第2个yield,依次类推。

我们可以来看一个简单的例子

function* generator() {
    let x=yield 1;
    let y=yield 3;
    let z=yield 5;
}

var g=generator();
console.log(g.next());
console.log(g.next());
console.log(g.next());
console.log(g.next());

结果是

{ value: 1, done: false }
{ value: 3, done: false }
{ value: 5, done: false }
{ value: undefined, done: true }

3.generator传参
yield里面有需要注意的地方

function* generator(x) {
    let y=yield x+1;
    console.log(y);
    return y;
}

let g=generator(1);
console.log(g.next());
console.log(g.next());

它的值是

{ value: 2, done: false }
undefined
{ value: undefined, done: true }

我们可以看到y的值是undefined

那怎么才能使y获取到yield x+1的值呢
需要我们把第一次获取的值的value值给g.next()当参数

function* generator(x) {
    let y=yield x+1;

    return y;
}

let g=generator(1);
console.log(g.next(g.next().value));

也就是这样写

4.异步编程

既然generate使用来解决异步编程,那么怎么来一段代码,看看如何解决一步编程的

function asyncfun(v) {
    setTimeout(function(){
        let r=v+20;
                //请求返回后最为next()的参数
        console.log(g.next(r));
    },500)
}
function* generate() {
        //执行请求
    let x=yield asyncfun(1);
    return x;
}
let g=generate();
g.next();

参考 http://www.ruanyifeng.com/blog/2015/04/generator.html Generator 函数的含义与用法
https://www.cnblogs.com/xiaoniuzai/p/6534417.html

相关文章

  • Generator 函数

    Generator Generator 函数是 es6 中的新的异步编程解决方案,本节仅讨论 Generator ...

  • 03-JavaScript-Generator异步编程

    Generator 概念 Generator 函数是 ES6 提供的一种异步编程解决方案 Generator 函数...

  • co库的简易实现

    generator Generator 函数是 ES6 提供的一种异步编程解决方案。 执行generator函数会...

  • JavaScript异步处理——Generator及async函

    Generator Generator 函数是 ES6 提供的一种异步编程解决方案。Generator函数在fun...

  • Generator函数介绍

    什么事Generator函数 Generator函数是ES6提供的一种异步编程解决方案, 可以把Generator...

  • 哈罗出行面试

    1. es6中generator generator是es6的异步编程解决方案简单应用如下: 用处用一下几点: 异...

  • generator

    三、 generator函数 Generator (分段函数)是 ES6 提供的一种异步编程解决方案,非常邪门 我...

  • 20.ES6中Generator生成器

    Generator是ES6的生成器1、Generator 函数是 ES6 提供的一种异步编程解决方案,在函数中可以...

  • Generator函数

    Generator 函数是 ES6 提供的一种异步编程解决方案。调用 Generator 函数后,该函数并不执行,...

  • Generator生成器

    Generator 函数的语法 简介 基本概念 Generator 函数是 ES6 提供的一种异步编程解决方案,语...

网友评论

      本文标题:es6的generator解决异步编程

      本文链接:https://www.haomeiwen.com/subject/zkadmftx.html