Generator

Generator函数是一个状态机,执行后返回一个遍历器对象。调用遍历器对象的.next()函数获取下一个状态.

Generator是一个普通的函数,函数内部使用yield关键字定义内部的不同状态.每次调用到yield表达式函数暂停执行

语法

function * name(){
    for(let i=0;i<10;i++){
        yield i*i;
    }
    return null;
}

var gn = name();
gn.next();//1
gn.next();//4

Generator函数的数据交换和错误处理

数据交互

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

var g = gen(1);
g.next();//3
g.next(1);//2

Generator 函数传入参数与普通函数的作用相同。调用next时传入的参数会作为上次一yield的返回值传入,所以第二次调用next返回值为2.

错误处理

function * gen(x){
    try{
        var y = yield x + 1;
    }catch(e){
        console.log(e);
    }
    return y;
}
var g = gen(1);
g.next();//3
g.throw('error throw!');
//error throw!

异步任务的封装

例子:

function * gen(url){
    var result = yield fetch(url);
    console.log(result);
}

var g = gen('http://xxxx/api');
var result =  g.next();
result.value.then(d=>d.json()).then(d => g.next(d));

上面的例子有两步,第一步是调用API获取数据,第二部是打印获取的数据到控制台.

async 函数

async是Generator函数的语法糖

改进点:

  • 内置执行器,不需要调用next方法。
  • 语义改进,async标识函数里面包括异步操作,await标识后面的表达式需要等待
  • async函数返回的是Promise对象

async 命令把多个异步操作包装成一个Promise对象

基本用法

async function getStockPriceByName(name) {
  const symbol = await getStockSymbol(name);
  const stockPrice = await getStockPrice(symbol);
  return stockPrice;
}

getStockPriceByName('goog').then(function (result) {
  console.log(result);
});

获取股票的报价,包括多个异步调用,最后返回股票报价,包装成promise对象.

ECMAScript6 Generator & async的更多相关文章

  1. Promise, Generator, async/await的渐进理解

    作为前端开发者的伙伴们,肯定对Promise,Generator,async/await非常熟悉不过了.Promise绝对是烂记于心,而async/await却让使大伙们感觉到爽(原来异步可以这么简单 ...

  2. 一个例子读懂 JS 异步编程: Callback / Promise / Generator / Async

    JS异步编程实践理解 回顾JS异步编程方法的发展,主要有以下几种方式: Callback Promise Generator Async 需求 显示购物车商品列表的页面,用户可以勾选想要删除商品(单选 ...

  3. ES6 Generator async

    Generator 函数是 ES6 提供的一种异步编程解决方案 async 函数使得异步操作变得更加方便,是 Generator 函数的语法糖. js单线程的原因是:避免DOM渲染冲突! 更新:201 ...

  4. js中异步方案比较完整版(callback,promise,generator,async)

    JS 异步已经告一段落了,这里来一波小总结 1. 回调函数(callback) setTimeout(() => { // callback 函数体 }, 1000) 缺点:回调地狱,不能用 t ...

  5. Generator function vs Async/Await

    Generator function vs Async/Await generator async /await refs xgqfrms 2012-2020 www.cnblogs.com 发布文章 ...

  6. Generator的正确打开方式

    前两年大量的在写Generator+co,用它来写一些类似同步的代码但实际上,Generator并不是被造出来干这个使的,不然也就不会有后来的async.await了Generator是一个可以被暂停 ...

  7. JS前端重点 -- Generator 函数的含义与用法

    Generator 函数的含义与用法 1.generator http://www.ruanyifeng.com/blog/2015/04/generator.html http://it.taocm ...

  8. 前端Tips#6 - 在 async iterator 上使用 for-await-of 语法糖

    视频讲解 前往原文 前端Tips 专栏#6,点击观看 文字讲解 本期主要是讲解如何使用 for-await-of 语法糖进行异步操作迭代,让组织异步操作的代码更加简洁易读. 1.场景简述 以下代码中的 ...

  9. 深入浅出mongoose

    深入浅出mongoose mongoose是nodeJS提供连接 mongodb的一个库. 此外还有mongoskin, mongodb(mongodb官方出品). 本人,还是比较青睐mongoose ...

随机推荐

  1. js密码强度校验

    function AuthPasswd(string) { if(!string){ jQuery("#low").removeClass("org"); }) ...

  2. MySQL 5.7 解压版 安装教程(图文详细)[Windows]

    最近在学习中用到了MySQL数据库,在安装过程中遇到了不少问题,在翻了大半天百度后,问题基本都解决了,所以写一篇MySQL 5.7 解压版的图文详细安装教程. 至于为什么我会选择解压版而不是安装版,一 ...

  3. javaweb之jsp的九个隐含对象与基本语法

    1.在页面上可以不用声明直接使用的对象称为jsp页面的隐含对象.使用<% %>编写的java代码在_jspService方法中,如下: public void _jspService(fi ...

  4. hdu 4003 Find Metal Mineral 树形dp ,*****

    Find Metal Mineral Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Other ...

  5. pycharm下 os.system os.popen执行命令返回有中文乱码

    原文 settings:

  6. centos自带python2.6升级到python2.7。并解决yum pip easy_install pip等模块兼容性问题

    参考原文:  https://www.cnblogs.com/kimyeee/p/7250560.html   https://www.cnblogs.com/galaxy-gao/p/5796488 ...

  7. ul li各属性设置

    1. ul li删除前面的黑点:style=“list-style:none;” <ul style=“list-style:none;”> <li></li> & ...

  8. react+antd 选项卡切换

    index.js: import React from 'react'; import ReactDOM from 'react-dom'; import CardSecond from './Car ...

  9. 浮动属性(float)

    (1.浮动是一种脱离标准文档流的形式. 作用:浮动就是用来制作多个盒子并排显示,也能设置宽高,负责网页排版 1 float:left;  左浮动 2 float:right; 右浮动 3 float: ...

  10. Sql Server中利用ISNULL方法判断数字并预设值

    1.ISNULL方法有两个参数,ISNULL(a,b),表达式含义为如果a为NULL,则设置该字段内容为b. 例如 table tab id sum 1 1 2 null select t.id,is ...