• ES6 generator生成器函数 async


    generator生成器函数

    • 定义

      • function后面加了*
      • 函数体里有 yield关键字 在这里起到了十分重要的作用,就相当于暂停执行并且返回信息。有点像传统函数的return的作用,是暂停执行
      • Generator函数被调用后得到的生成器理解成一个遍历器iterator,用于遍历函数内部的状态。
    function * 函数名{
    let obj = yield "生成器函数"
    } 

    表现形式

    • 调用这个函数,不会立即执行函数体里的内容,返回一个对象
    • 通过这个对象的next方法,可以驱动函数的执行,但是并不会执行完,执行到下一个yield关键字的时候,停住
    • 调用next()方法返回的结果
      • value: yield关键字后面的表达式的结果。
      • done:函数是否执行完。 (当函数return的时候执行完,返回true)
      • 函数return的时候,value是return的内容,done是true
    • next()方法可以加参数
      • next(参数)
      • 这个参数会作为上一个yield关键字的返回值

    作用

    • 函数可以返回多个值
    • 在调用函数之后,可以给函数体里传递数据了
    • 调用函数的时候,可以控制函数内部的执行了
    • 可以解决异步问题
     

    生成器函数的执行器

    //定义生成器函数
    function* initData() {
            let category = yield getShopCategory();
            let goods = yield getGoods(category[0].id);
            let comment = yield getComment(goods[0].id);
            return comment;
        }
      // 书写生成器函数执行函数
        function run(gen) {
            let lt = gen();
            return new Promise((reslove, reject) => {
                function step(data) {
                    if (data.done) {
                        console.log('递归调用结束了');
                        reslove(data.value);
                    } else {
                        data.value.then(res => {
                            step(lt.next(res))
                        })
                    }
                }
                step(lt.next())
            })
        }
        //调用执行
        run(initData).then(res => {
            console.log(res);
        })

      

    async/await
    这是ES7的语法,它是基于generator函数做的语法糖。
    直接运行到结果
    async function initData() {
            let category = await getShopCategory();
            let goods = await getGoods(category[0].id);
            let comment = await getComment(goods[0].id);
            return comment;
        }
        initData().then(res => {
            console.log(res)
        })  
  • 相关阅读:
    python-序列化与反序列化(loads、load、dumps、dump)
    STM32命名
    批处理参考
    Delphi通过管道执行外部命令行程序(cmd)并获取返回结果
    ubuntu使用备忘
    ubuntu14.04中安装QuartusII9.1步骤
    删除选中数据
    DBGridEh基本操作
    sqlserver 字符串函数
    使用 Delphi Xe 的 TDictionary
  • 原文地址:https://www.cnblogs.com/hjcby/p/13612858.html
Copyright © 2020-2023  润新知