Generator函数与async总结

2018-03-06  本文已影响0人  葶寳寳

Generator函数

1.理解基本概念

2.yield表达式

遍历器对象的next方法的运行逻辑如下。

(1)遇到yield表达式,就暂停执行后面的操作,并将紧跟在yield后面的那个表达式的值,作为返回的对象的value属性值。
(2)下一次调用next方法时,再继续往下执行,直到遇到下一个yield表达式。
(3)如果没有再遇到新的yield表达式,就一直运行到函数结束,直到return语句为止,并将return语句后面的表达式的值,作为返回的对象的value属性值。
(4)如果该函数没有return语句,则返回的对象的value属性值为undefined

需要注意的是,yield表达式后面的表达式,只有当调用next方法、内部指针指向该语句时才会执行。

yield表达式与return语句对比:

相似: 都能返回紧跟在语句后面的那个表达式的值。
区别: 每次遇到yield,函数暂停执行,下一次再从该位置继续向后执行,而return语句不具备位置记忆的功能。
一个函数里面,只能执行一次(或者说一个)return语句,但是可以执行多次(或者说多个)yield表达式。正常函数只能返回一个值,因为只能执行一次returnGenerator 函数可以返回一系列的值,因为可以有任意多个yield。

3.与 Iterator 接口的关系
任意一个对象的Symbol.iterator方法,等于该对象的遍历器生成函数(即Generator函数)。

4.next()方法参数

5.for...of循环

6.Generator.prototype.throw()

Generator 函数返回的遍历器对象,都有一个throw方法:

Generator函数体内抛出的错误,也可以被函数体外的catch捕获。

7.Generator.prototype.return()

Generator函数返回的遍历器对象,还有一个return方法:

8.next()throw()return() 的共同点

都是让 Generator函数恢复执行,并且使用不同的语句替换yield表达式。

9.yield* 表达式

考文档:Generator 函数的语法

async函数

实现原理:
async其实就是Generator函数的语法糖。将generator函数和它的自动执行器co包装了下。

特点:

用法

使用过程中的需要注意的点:
1.await后的Promise对象可能是rejected,所以需要有相应的错误处理机制。

async function func() {
   // 放在try{ } catch(){ }中
   try {
       await getDataPromise();
   } catch(err) {
       console.log(err);
   }

   // 或者
   await getDataPromise().catch(err => {
       console.log(err);
   });
}

2.同样,await不能出现在普通函数中。

上一篇下一篇

猜你喜欢

热点阅读