- 课外知识:所有的具有interator接口的对象都可以通过使用扩展运算符转为数组;
- Iterator 接口提供了适合多种数据遍历的机制,for of就是以此为主的遍历方法;
主要包括 next()方法,返回{done:boolean,value:value}
手写一个遍历器:
Class fakeInterator:{
Construction(arr){
This.max = arr.length
This.currentIndex = 0
This.arr = arr
}
Next(){
Return this.currentIndex<this.max? { done:false,value: this.arr[this.currentIndex]}: { done:true,value: undefined}
}
}
······················· ··· · ·· · · · · · · · · · · · · · · · · · 毕 ·· · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Yield || yield* 本质上就是一个interator调用器,它会调用后面数据的interator接口
Yield本身没有返回值,它只是一个状态机制管理,所以如果表达式赋值,那么永远返回的都是undefined,但是如果next中带参数,那么就会代替这个yield返回这个参数;
Co模块:自动执行器,用于自动执行generate函数
Async await 就是generator的语法糖,主要的改进在于:
- 内置自动执行器
- 更好的语义,将* ,yield转为 async await ,更加人性化;
- 对象更广泛,co模块中规定yield后面只能跟chunk函数或promise对象,而await可以跟Promise对象和原始数据;
- 以前是interator对象现在是promise对象,更方便回调;