理解JavaScript的异步二

ES6中的Generator

1.使用function* 来定义Generator,如function* func(){}。注意Generator不是函数。

2.定义的func不会立即出发执行,而是一上来就暂停,每次执行next()都会打破暂停状态去继续执行,直到遇到yield或者return。

3.遇到yield时,会执行yield后面的表达式并返执行之后的值,然后再次进入暂停状态。此时,done:false;遇到return时,会返回值,执行结束。此时,done:true。此后再执行next,返回的都是{value:undefined,done:true}。

4.每次next()的返回值都是{vaalue:...,done:...}的形式。

5.Iterator对象是一个指针对象,实现类似于单项链表的数据结构,通过next()将指针指向下一个节点。

6.Generator的具体应用

①next和yield参数传递:yield具有返回数据的功能,yield后面的数据在执行时返回;next中的参数会被传递给上一个已经执行完了的yield语句前面的变量;

②for...of...;

③yield * 语句,将另一个Generator放入另一个Generator对象中;

7.thunk函数:经过对传统的异步操作函数进行封装,得到一个只有一个参数的函数,而且这个参数是一个callback函数,那这就是一个thunk函数。使用thunkify库:

const thunkify=require("thunkify");
const thunk= thunkify(fs.readFile);
const readFileThunk=thunk('data.json','utf-8');
readFileThunk((err,data)=>{});

8.使用co库

使用Generator的工程师,肯定要用到co库。定义Generator与一般形式一样,开头引用co库:const co =require("co");

const c=co(gen);使用const c=co(gen)返回的是一个promise对象。

9.Generator的本质是“暂停”。Generator,promise异步操作都离不开callback。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值