美文网首页
11.Generator函数

11.Generator函数

作者: web_jianshu | 来源:发表于2020-06-28 17:09 被阅读0次
<!DOCTYPE html>

<html lang="en">

  <head>

    <meta charset="UTF-8" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <meta http-equiv="X-UA-Compatible" content="ie=edge" />

    <title>Document</title>

  </head>

  <body></body>

</html>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>

<script>

  let p1 = () => {

    return new Promise((resolve, reject) => {

      $.get("http://127.0.0.1:5000/api/1", res => {

        resolve(res);

        reject(res);

      });

    });

  };

  let p2 = msg => {

    return new Promise((resolve, reject) => {

      $.get("http://127.0.0.1:5000/api/2", { msg: msg }, res => {

        resolve(res);

      });

    });

  };

  //   p1()

  //     .then(res => {

  //       console.log(res);

  //       return p2(123);

  //     })

  //     .then(res => {

  //       console.log(res);

  //     });

  //   let all = Promise.all([p1(), p2()]);

  //   all.then(res => {

  //     console.log(res);

  //   });

  // 假如:上面两个异步是封装在一个函数当中

  // 使用generator函数实现了异步同步的书写

  // 满足条件:p1返回结果当作p2的参数

  // Generator函数是一个普通函数,但是有两个特征.一是,function关键字与函数名之间有一个星号

  // 二是,函数体内部使用yield表达式, 定义不同的内部状态(yield在英语里的意思就是“产出”)

  // 我们把需要做异步的代码放在yield表达式后面

  // 定义Generator函数

  //   function* getAll() {

  //     // generator函数体内部代码通过迭代器的next方法调用执行

  //     let p1val = yield p1(); // 调用next迭代generator函数

  //     console.log("p1val", p1val); // p1val是调用第二个next传进来的

  //     let p2val = yield p2(p1val);

  //     // 还有其他代码,必须等yield代码执行结束

  //   }

  //   // 调用Generator函数 返回Generator函数生成的对象(迭代器)

  //   let all = getAll();

  //   console.log(all); // 迭代器

  //   console.log(all.next()); // {value: Promise, done: false}

  //   console.log(all.next()); // {value: Promise, done: false}

  //   console.log(all.next()); // {value: undefined, done: true}

  // 表示执行第一个yield后面的异步方法得到value值为Promise实例对象(某一个状态)

  // done 为 false代表后面还有yield 当前generator函数还没有执行完成

  // true代表当前generator函数里面所有异步方法全部执行结束

  //   all.next().value.then(res1 => {

  //       console.log('res1', res1);

  //       all.next(res1).value.then(res2 => {

  //           console.log(res2);

  //       }).catch(err => {

  //           console.log(err);

  //       })

  //   }).catch(err => {

  //       console.log(err);

  //   })

  // async 函数是 ES7(babel 支持)引入的 Generator 函数的语法糖

  // p1()必须是一个Promise对象 ,如果不是就会使用 Promise构造函数来包裹 ,并执行resolve

  async function getAll() {

    let p1val = await p1();

    // .then(res => {

    //     console.log('success', res);

    // }).catch(err => {

    //     console.log('err', err);

    // }) // p1执行了resolve之后,主动的调用next  await返回值p1val永远是调用resolve结果

    console.log("await", p1val);

    let p2val = await p2(p1val);

    console.log(p2val);

    // 还有其他代码,必须等yield代码执行结束

    // await与.catch相反 相当于.then第一个回调函数的结果

  }

  getAll();

</script>

相关文章

  • 11.Generator函数

  • Excel(三)

    AND函数 OR函数 NOT函数 IF函数 频率分析函数FREQUENCY

  • if、else if、for、while、repeat函数

    ①if函数 ②else if函数 ③for函数 ④while函数 ⑤repeat函数

  • strsplit、mapply、paste、match函数

    strsplit函数 mapply函数 strsplit函数 mapply函数 paste函数 match函数 第...

  • Oracle中常用函数(SQL)

    Oracle函授有以下几个分类:数字函数、字符函数、日期函数、转换函数、集合函数、分析函数 数字函数: 字符函数:...

  • MySQL函数

    字符函数 数字运算函数 比较运算符和函数 日期时间函数 信息函数 聚合函数 加密函数 流程函数

  • BI-SQL丨AND & OR & IN

    AND函数 & OR函数 & IN函数 AND函数、OR函数和IN函数都可以理解是WHERE函数的补充,当然也可以...

  • Python之函数

    课程大纲 函数定义 函数的参数 函数的返回值 高阶函数 函数作用域 递归函数 匿名函数 内置函数 函数式编程 将函...

  • 函数基本知识

    函数 函数的定义: def 函数名() 函数的调用:函数名() #不能将函数调用放在函数定义上方 函数的文档注...

  • 积分表——不定期更新

    基本初等函数包括: 常函数: 幂函数 指数函数 对数函数 三角函数 反三角函数 I、反函数Ⅱ、复合函数:初等函数(...

网友评论

      本文标题:11.Generator函数

      本文链接:https://www.haomeiwen.com/subject/fsmwfktx.html