专栏首页李才哥Generator 函数的异步应用
原创

Generator 函数的异步应用

Generator 函数的异步应用

传统方法

回调函数

事件监听

发布/订阅

Promise 对象

基本概念

所谓"异步",简单说就是一个任务不是连续完成的,可以理解成该任务被人为分成两段,先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段

所谓回调函数,就是把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,就直接调用这个函数

Promise 对象是一种新的写法,允许将回调函数的嵌套,改成链式调用

Generator 函数

第一步,协程A开始执行。

第二步,协程A执行到一半,进入暂停,执行权转移到协程B。

第三步,(一段时间后)协程B交还执行权。

第四步,协程A恢复执行。

Generator 函数是协程在 ES6 的实现,最大特点就是可以交出函数的执行权(即暂停执行)

Generator 函数可以暂停执行和恢复执行,这是它能封装异步任务的根本原因

Thunk 函数

Thunk 函数是自动执行 Generator 函数的一种方法

Thunk 函数的定义,它是“传名调用”的一种实现策略,用来替换某个表达式

生产环境的转换器,建议使用 Thunkify 模块

co 模块

co 模块可以让你不用编写 Generator 函数的执行器

(1)回调函数。将异步操作包装成 Thunk 函数,在回调函数里面交回执行权。

(2)Promise 对象。将异步操作包装成 Promise 对象,用then方法交回执行权。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ES6中的迭代器、Generator函数以及Generator函数的异步操作

    最近在写RN相关的东西,其中涉及到了redux-saga ,saga的实现原理就是ES6中的Generator函数,而Generator函数又和迭代器有着密不可...

    lizelu
  • ES6的异步编程之Generator

    异步编程对 JavaScript 语言太重要。JavaScript 只有一根线程,如果没有异步编程,根本没法用,非卡死不可。

    javascript.shop
  • Python异步调用函数

    Python2.x版本中,我们经常会用到异步的调用函数的功能,今天我们简单介绍一下异步执行Python函数的写法,要想实现异步调用Python函数,有几个...

    AsiaYe
  • SAP UI5 函数节流和异步完成令牌的应用

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • Python 实现异步调用函数

    py3study
  • Thinking--异步请求函数return应不应该加await?

    我们知道,调用 async 包裹的函数也需要通过 async...await 进行处理;同样的获取异步结果,也可以通过 async...await 处理,那么上...

    奋飛
  • 正确使用异步函数的姿势[每日前端夜话(0x06)]

    在编写异步函数时,await 、 return与return await之间存在差异,选择正确的处理方式非常重要。

    疯狂的技术宅
  • Generator 函数的含义与用法

    本文是《深入掌握 ECMAScript 6 异步编程》系列文章的第一篇。 Generator函数的含义与用法 Thunk函数的含义与用法 co函数库的含义与...

    ruanyf
  • ES6中的Generator函数

    之前在React项目中,遇到异步请求,都是通过redux-thunk来处理,但使用这种方式,action就变得不那么纯净了。当前新的趋势是使用redux-sag...

    张子阳
  • Generator 函数的语法

    李才哥
  • 用回调函数调用异步流回调函数内的数据

    本文的标题看起来也许比较绕,看不懂也没关系,后面会慢慢说明。写这篇文章是为了记录一下前几天我碰到的一个问题。

    凌虚
  • 使用yield进行异步流程控制

    现状 目前我们对异步回调的解决方案有这么几种:回调,deferred/promise和事件触发。回调的方式自不必说,需要硬编码调用,而且有可能会出现复杂的嵌套关...

    欲休
  • Generator:化异步为同步

    一、Promise并非完美 我在上一话中介绍了Promise,这种模式增强了事件订阅机制,很好地解决了控制反转带来的信任问题、硬编码回调执行顺序造成的“回调金...

    挖掘大数据
  • es6 --- Generator 函数

    在 ES6 出现之前,基本都是各式各样类似Promise的解决方案来处理异步操作的代码逻辑,但是 ES6 的Generator却给异步操作又提供了新的思路,马上...

    小蔚
  • JavaScript 中如何进行异步编程

    JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。

    江米小枣
  • async/await剖析

    JavaScript是单线程的,为了避免同步阻塞可能会带来的一些负面影响,引入了异步非阻塞机制,而对于异步执行的解决方案从最早的回调函数,到ES6的Promis...

    WindrunnerMax
  • 异步与回调/函数的作用域链

    程序里面所有的任务,可以分成两类:同步任务(synchronous)和异步任务(asynchronous)。

    代码之风
  • 【深扒】深入理解 JavaScript 中的异步编程

    虽然整个思路看起来没什么毛病,对吧。但是它就是不行的,获取数据是异步的,也就是说请求数据的时候,输出已经执行了,这时候必然是 undefined

    小丞同学
  • 异步流程控制:7 行代码学会 co 模块

    首先请原谅我的标题党(●—●),tj 大神的 co 模块源码200多行,显然不是我等屌丝能随便几行代码就能重写的。只是当今大家都喜欢《7天学会xx语言》之类的速...

    用户4962466

作者介绍

精选专题

活动推荐

扫码关注云+社区

领取腾讯云代金券