美文网首页
[js异步编程]封装Generator的co函数

[js异步编程]封装Generator的co函数

作者: 孙二柯 | 来源:发表于2021-07-13 23:07 被阅读0次

我们使用ES7的语法 async await可以将异步函数来同步调用。 其实原理是利用了ES6的Generator。我们可以封装一个Generator的co函数,来理解async await

/*
 * @Author: sunxy
 * @Date: 2021-07-13 22:24:35
 * @LastEditors: sunxy
 * @LastEditTime: 2021-07-13 23:02:13
 * @Description:  Generator 
 * @FilePath: /feir/src/components/Generator.js
 */

const myAjax = function (str) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(str)
    }, 3000)
  })
}

function* gen() {
  console.log('-----000----')
  yield myAjax('11111')
  console.log('-----111----')
  yield myAjax('22222')
  console.log('-----222----')
  yield myAjax('33333')
  console.log('-----333----')

}
let g = gen()
//g() //不是一个函数  g is not a function
console.log(g) //  [Generator] {}

// 封装co函数 可以使Generator顺序执行,其实 async await 函数就是Generator和co的语法糖
function co(fun) {
  let f = fun()
  function hander(g) {
    if (g.done) return
    g.value.then(res => {
      console.log(res)
      hander(f.next(res)) // 递归执行
    })
  }
  hander(f.next())
}
co(gen)
//执行顺序
// -----000----
// 11111
// -----111----
// 22222
// -----222----
// 33333
// -----333----

async 相当于 * ; await 相当于 yield

// async 相当于 * ; await 相当于 yield
async function at(){
  console.log('aaa-----000----')
  await myAjax('aa11111')
  console.log('aa-----111----')
  await myAjax('aa22222')
  console.log('aa-----222----')
  await myAjax('aa33333')
  console.log('aa-----333----')
}
//at() 效果与上面的一致

相关文章

  • [js异步编程]封装Generator的co函数

    我们使用ES7的语法 async await可以将异步函数来同步调用。 其实原理是利用了ES6的Generator...

  • js异步编程(updating)

    js 异步编程方式: Promise,generator/yield,async/await 回掉函数 js事件监...

  • Generator(生成器)函数

    基本概念## 解决 异步编程,整个 Generator 函数就是一个封装的异步任务,或者说是异步任务的容器。 调用...

  • ES6-Generator可暂停函数

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

  • Generator函数

    Generator函数是一种异步编程解决方案。他好比一个状态机,封装了多个内部状态。 执行Generator函数会...

  • co.js函数库

    1. Generator函数 Generator 函数就是一个封装的异步任务。异步操作需要暂停的地方,都用 yie...

  • 03-JavaScript-Generator异步编程

    Generator 概念 Generator 函数是 ES6 提供的一种异步编程解决方案 Generator 函数...

  • Generator

    异步编程解决方案 Generator 函数、Promise 、回调函数、事件 Generator 函数有多种理解角...

  • JS中的异步操作

    JS中异步编程的方法有: 回调函数 事件监听 发布/订阅 promise generator(ES6) async...

  • co库的简易实现

    generator Generator 函数是 ES6 提供的一种异步编程解决方案。 执行generator函数会...

网友评论

      本文标题:[js异步编程]封装Generator的co函数

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