ES5 generator & yield 认识生成器函数

2019-02-21  本文已影响0人  崩鲨卡拉卡
OK

generator 生成器函数(yield:放弃、退让、退位的意思笔记参考

function show() {
    console.log('a')
    console.log('b')
}
show() // 普通函数

function *show2() {
    console.log('1')
    yield
    console.log('2')
}
let genObj = show2()
genObj.next() // 1
genObj.next() // 2
genObj.next() // 最后了,没有结果

yield 是个啥?

传参:

function *show(){
           alert("111")
           let wt=yield;
           alert("222"+wt)
       }
       let gen=show();
       gen.next(1);  传参无效,只是负责 启动
       gen.next("传入的参数");

返回:

function *show(){
           alert("111")
           let wt=yield;
           alert("222"+wt)
       }
       let gen=show();
       gen.next(1);  传参无效,只是负责 启动
       gen.next("传入的参数");

Promise 和 generator 对比实例:

// 带逻辑-generator
runner(function * () {
    let userData = yield $.ajax({url: 'getUserData'})

    if (userData.type == 'VIP') {
        let items = yield $.ajax({url: 'getVIPItems'})
    } else {
        let items = yield $.ajax({url: 'getItems'})
    }
})
// yield 实例,用同步方式写异步
server.use(function * () {
    let data = yield db.query(`select * from user_table`)
    this.body = data
})
上一篇 下一篇

猜你喜欢

热点阅读