首页  >  文章  >  web前端  >  JS异步实现Generator的方法

JS异步实现Generator的方法

一个新手
一个新手原创
2017-10-11 09:57:461648浏览

一、Symbol数据类型

      ES6中新增加了Symbol数据类型。

      原生具有[Symbol.iterator]属性的数据类型:数组、类数组、map、set、

      具有[Symbol.iterator]属性的对象,直接调用就可以生成一个Iterator对象

二、Iterator对象:是一个指针对象,遍历器对象

        方法:next():返回的格式为{value:    ,done:      }

                 使用for..of遍历: 每次遍历得到的是value值。              

三、Geneteror

  function*  G(){
             yield    200;
             yield    300;
            return  400;
       }
    var g=G();

      1.Generator不是一个函数,定义generator时,使用function*,使用yield来返回结果。

      2.调用Generator之后,它内部的代码不会立即执行,而是处于一个暂停的状态。并生成一个generator对象。

      3.遇到yield时,会执行yeild后面的表达式,并返回执行之后的值,然后再次进入暂停状态,此时done: false

    Generator返回的也是一个iterator对象,因此可以使用next方法、for..of

    1.使用next方法时,next中的参数会传递给已经执行的yield前面的值。

     2.yield*可以在一个Generator中引用另外一个Generator。

四、generator实现异步操作

      1.需要thunk函数,只有一个参数,即回调函数

      2.通常使用co库,对异步操作进行包装,方便简洁。

      3.yield后面必须是thunk函数。

      4.generator依然依靠callback

 五、async-await:是Generator的语法糖

      与Generator相比:

          1.将function*  替代为 async function

          2.将yield替代为await

          3. await后面是promise对象。跟其他类型的数据也OK,但是会直接同步执行,而不是异步。 

以上是JS异步实现Generator的方法的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn