`
weibin529
  • 浏览: 3640 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

generator函数和promise的结合

 
阅读更多
<script>
function run(generator) {
    var it = generator();
    function go(result) {
      if (result.done) {
        return result.value;
      }
      return result.value.then(function (value) {
        return go(it.next(value));
      }, function (error) {
        return go(it.throw(error));
      })
    }
    go(it.next());
  }




  function getFoo() {
    return new Promise(function (resolve, reject) {
      setTimeout(function () {
        resolve('foo');
      }, 5000)

    })
  }


  run(function* () {
    try {
      var foo = yield getFoo();
      console.log(foo);
    } catch (e) {
      console.log(e);
    }
  });

</script>


   相同的功能  asyn 函数实现

<script>

  function getFoo() {
    return new Promise(function (resolve, reject) {
      setTimeout(function () {
        resolve('foo');
      }, 5000)

    })
  }


  async function run() {
    try {
      var foo = await getFoo();
      console.log(foo);
    } catch (e) {
      console.log(e);
    }
  };
  run()
</script>





分享到:
评论

相关推荐

    前端开源库-bluebird-co

    Bluebird是一个高性能、全面特性的Promise库,而`co`库则是一种将Generator函数和Promise结合使用的工具,它使得异步代码可以以同步的方式编写,极大地提升了代码的可读性和可维护性。 在前端开发中,异步操作是必...

    JS Generator 函数的含义与用法实例总结

    此外,当与`async/await`语法结合使用时,Generator函数可以实现更简洁的异步编程风格: ```javascript async function asyncJobs() { const fileAContent = await readFile(fileA); const fileBContent = await ...

    cojs:简单的javascript协程实现

    在`cojs`库中,它将Generator函数和Promise结合,使得在Generator函数中可以方便地处理异步操作。例如,当Generator函数遇到一个`yield`表达式并其后面是一个Promise对象时,`cojs`会等待Promise解析,然后将结果...

    Node.js-在Express中愉快地使用Generator

    5. **结合Promise和Generator** - Generator可以和Promise无缝集成,`yield`可以等待Promise的结果。 - 示例: ```javascript function someAsyncTask() { return new Promise((resolve, reject) =&gt; { ...

    JavaScript 中使用 Generator的方法

    在Node.js中,Generator还可以用于实现轻量级的并发控制,通过控制Generator函数的执行来管理不同任务的执行顺序和状态。 为了使用Generator函数,需要在函数声明时使用星号(*)来标识这是一个Generator函数。在...

    generator-ajax.zip

    Generator函数通过`function*`定义,使用`yield`关键字来暂停执行,并且可以接收外部传递的值。例如: ```javascript function* myGenerator() { let result = yield fetch('http://example.com'); console.log...

    js使用generator函数同步执行ajax任务

    在JavaScript中,异步编程是处理I/O操作(如AJAX请求)的关键,因为它允许...此外,配合使用`co`库或其他Promise包装器,可以进一步简化Generator函数的使用。这使得在JavaScript中实现同步风格的异步编程成为可能。

    js代码-实现Generator函数的run

    在实际应用中,Generator函数经常与`for...of`循环结合,或者与`async/await`语法一起使用,来处理异步操作,比如文件读写、网络请求等。通过这种方式,我们可以将复杂的异步逻辑转换为同步风格的代码,使得代码更...

    ES6 Generator函数的应用实例分析

    本文实例讲述了ES6 Generator函数的应用。分享给大家供大家参考,具体如下: Generator 函数是 一种异步编程解决方案,Generator 函数会返回一个遍历器对象,Generator 函数是一个普通函数,但是有两个特征。一是,...

    深入理解js generator数据类型.docx

    JavaScript 的 Generator 是 ES6 引入的一种新的数据类型,它提供了一种创建迭代器(iterator)的机制,允许函数保存执行状态并能暂停和恢复执行。Generator 函数由 `function*` 关键字定义,其中的 `*` 表明这是一...

    js代码-Generator函数:状态机-生成器

    Generator函数还可以与`for...of`循环结合,处理遍历操作,例如遍历数组、Map或Set等可迭代对象。此外,它与`async/await`语法协同工作,使得异步编程变得更加简洁和易读。 总的来说,Generator函数在JavaScript中...

    co模块

    2. **co 模块**:co是TJ Holowaychuk开发的一个流行的库,它将Generator函数与Promise结合,提供了优雅的异步编程方式。co通过包装Generator函数,将它们转化为返回Promise的对象,进而可以使用`.then()`方法处理...

    js代码-Generator第一次next传值

    Generator函数与Promise结合使用时,可以实现更复杂的异步控制流。例如,我们可以通过`yield`一个Promise,然后在Promise解析或拒绝后继续执行Generator函数。这种方式被称为“协程”,它使得异步代码看起来更像同步...

    JS co 函数库的含义和用法实例总结

    `co`库结合了Generator函数和Promise/Thunk的优势,使得我们可以使用Generator函数来编写异步代码,而无需关心底层的Promise或Thunk处理。当Generator函数中的`yield`表达式返回一个Promise时,`co`会自动处理...

    js代码-7.13.2-Generator()函数注意事项

    Generator函数的一个重要应用场景是配合`for...of`循环和`async/await`进行异步编程。例如,我们可以使用Generator函数来实现一个简单的异步任务队列: ```javascript function asyncQueue(generator) { function ...

    ES6 系列之 Generator 的自动执行的方法示例

    由于yield可以返回Promise对象,所以可以通过Promise的then方法来处理异步结果,并在异步操作成功完成后继续执行Generator函数。 对于单个异步任务,文档给出一个例子,使用node-fetch模块来发起网络请求。通过...

Global site tag (gtag.js) - Google Analytics