es6 iterable

2018-08-05  本文已影响13人  peerben

首先一个对象数据结构能够用for of 或...解构,必须是iterable的

interface Iterable {
  [Symbol.iterator]() : Iterator,
}

interface Iterator {
  next(value?: any) : IterationResult,
}

interface IterationResult {
  value: any,
  done: boolean,
}

对象实现Iterable接口,并且返回一个Iterator, Iterator返回IterationResult格式的数据,那么这个对象就是一个iterable

如果在 Generator 函数内部,调用另一个 Generator 函数,默认情况下是没有效果的。
这个就需要用到yield*表达式,用来在一个 Generator 函数里面执行另一个 Generator 函数。

yield* 表达式用于委托给另一个generator 或可迭代对象。

yield* 后面接受一个 iterable object 作为参数,然后去迭代(iterate)这个迭代器(iterable object),同时 yield* 本身这个表达式的值就是迭代器迭代完成时(done: true)的返回值。调用 generator function 会返回一个 generator object,这个对象本身也是一种 iterable object,所以,我们可以使用 yield* generator_function() 这种写法。

上一篇下一篇

猜你喜欢

热点阅读