generator-yield(es6)入门系列

一、概念

generator函数是一种执行过程中可暂停的函数。比如在一个函数中需要发起一次ajax请求,在请求之后再向下执行,这种场景我们可以使用generator函数。

二、语法

1. 定义函数

generator英文翻译为构造器的意思,可以将一个generator函数理解为多个普通函数构成的函数

function * nice () {
  console.log(1)
  yield
  console.log(2)
}
let genObj = show2()
genObj.next() // 1
genObj.next() // 2
  • 创建一个generator函数,需在function和函数名之间加一个分号
  • generator函数首次执行返回的是一个generator函数对象
  • 调用generator函数对象的next方法会执行该函数直到遇到yield关键字
  • 再次调用generator函数对象的next方法会继续执行到下一个yield

2. 停顿点yield

generator函数中,我们在哪里暂停这个函数,可用yield关键字实现。

其中yield可用于传参和返回。

(1)传参

function * show() {
    console.log('1')
    var a = yield
    console.log('2')
    console.log(a)
}
// yield 传参
var gen = show()
gen.next(6) // 首次调用next传参无效
gen.next(3) // 将yield的值赋为3

(2)返回

function * show() {
  console.log('1')
  var a = yield 99
  console.log('2')
  console.log(a)
}
var gen = show()
let res1 = gen.next(6)
console.log(res1) // {value: 99,done: false}

let res2 = gen.next(3)
console.log(res2) // {value: undefined,done: true}

yield的返回值是一个对象,其中有两个属性。value返回的值,done当前generator函数是否结束的布尔值。

generator-yield属于es6语法,在es7中出现了语义化更强的async await,欢迎了解

END

你可能感兴趣的:(ES6)