美文网首页
ES6-Generator可暂停函数

ES6-Generator可暂停函数

作者: fb941c99409d | 来源:发表于2019-03-14 00:19 被阅读0次

Generator函数

ES6提供的解决异步编程的方案之一 Generator函数是一个状态机,内部封装了不同状态的数据, 用来生成遍历器对象(指针对象)
可暂停函数(惰性求值函数), 碰到yield暂停,调用next方法再次启动。每次返回的是yield后的表达式结果

特点:
  1、function 与函数名之间有一个星号
  2、内部用yield表达式来定义不同的状态
    例如:
      function* generatorExample(){
        let result = yield 'hello';  // 状态值为hello
        yield 'generator'; // 状态值为generator
      }
  3、generator函数返回的是指针对象(iterator),而不会执行函数内部逻辑
  4、调用next方法函数内部逻辑开始执行,遇到yield表达式停止,返回{value: yield后的表达式结果/undefined, done: false/true}
  5、再次调用next方法会从上一次停止时的yield处开始,直到下个yield,或者走到最后
  6、yield语句返回结果通常为undefined, 当调用next方法时传参内容会作为启动时yield语句的返回值。
<script>
  function* myGenerator(){
    console.log('开始执行')
    //调用next开始执行函数时 ,如果遇到yield关键字会暂停函数的执行 同时将yield后面的 值或表达式的结果以 指针对象的形式 返回
    let result = yield 'hello'//#1
    console.log('再次执行 , next调用时传入的参数作为上一次暂停时yield的返回值: '+result) //abcd
    yield 'world'// #2
    console.log('执行结束')
    //当函数体的内容执行完毕后, 指针对象的value默认为undefined , 手动指定return可以修改 ,但只有一次,后续的next() 还是返回undefined
    return '最后的结果'//#3
  }

  let mg = myGenerator()
  console.log(mg.next()) //{value: "hello", done: false}//#1
  console.log(mg.next('abcd')) //{value: "world", done: false}#2
  console.log(mg.next()) //{value: 最后的结果, done: true}//#3
  console.log(mg.next()) //{value: undefined, done: true}


</script>

案例
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
 /*
    * 需求:
    * 1、发送ajax请求获取新闻内容
    * 2、新闻内容获取成功后再次发送请求,获取对应的新闻评论内容
    * 3、新闻内容获取失败则不需要再次发送请求。
*/ 
function getNews(url){

    $.get(url, function (data) {
      // 调用next传参会作为上次暂停是yield的返回值
      SX.next(data)
    })

  
}
function* sendXml(){
  let newsData = yield getNews('http://localhost:3000/news?id=2') 

  // 当获取新闻内容成功,发送请求获取对应的评论内容
  let url = newsData.commentsUrl;
  let commentsData = yield getNews('http://localhost:3000'+url)

  console.log(commentsData)
}
let SX = sendXml() 
SX.next() 

</script>

相关文章

  • ES6-Generator可暂停函数

    Generator函数 ES6提供的解决异步编程的方案之一 Generator函数是一个状态机,内部封装了不同状态...

  • ES6-Generator 函数的语法

    Generator 是一种异步函数解决方案;语法和传统的方法完全不相同;Generator有多种解释;首先可以把它...

  • ES6-Generator

    Generator函数 返回一个value和done结果value是yield的值done是booleanyiel...

  • ardinuo分享-04-的数学函数和时间函数

    一、时间函数 (一)delay()函数 1.delay()函数简介 描述:将程序暂停给定参数的时间量(以毫秒...

  • async与await暂停作用

    1. 2. 3. 同步打印的4,5可以看出函数执行是否被暂停,如果未暂停同步代码会一直执行完,而暂停后会等暂停处,...

  • 8-1、generator yield

    generator 生成器generator 函数 中间可以暂停(普通函数一路走到黑)*fun 加 *next()...

  • pause()函数

    C语言pause()函数:让进程暂停直到信号出现 头文件: #include 定义函数: int pause(vo...

  • 【Python 1-12】Python手把手教程之——用户输入i

    作者 | 弗拉德来源 | 弗拉德(公众号:fulade_me) 函数input() 函数input()让程序暂停运...

  • 事件轮询机制

    js 单线程 alert 函数不仅会暂停主线程,而且会暂停定时器定时器回调函数只有在运行栈中的初始化代码全部执行完...

  • 倒计时可暂停

    创建计数变量和标志,以了解计数器是否停止或运行。 为每个按钮添加动作 在获取第二个按钮的动作中,使用输入对话框获取...

网友评论

      本文标题:ES6-Generator可暂停函数

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