关于异步
一、概述
js的执行环境是‘单线程’的,异步操作是至关重要的。异步任务就是任务需要分阶段完成,各阶段可以插入其他任务,否则就是同步任务。
二、实现
js处理异步任务主要分了3个阶段:
- 回调函数:异步任务拆分成多个阶段的代码,将这些代码用函数包裹以便在满足条件的时候继续异步任务,该函数被称为回调函数。这样处理主要缺点是:异步任务的逻辑被拆分了,异步任务嵌套异步任务后会形成‘回调地狱’,代码耦合程度太高。
- Promise和Generator:Promise是回调函数的语法糖,主要解决‘回调地狱’的问题。Generator的特性类似‘协程’,目前的实现只能说是‘半协程’,只有Generator的实例有执行权。Generator通过yield来将异步任务分阶段,每一个阶段结束都会保留当前的执行上下文,调用next方法执行下一个阶段。缺点就是需要手动执行next,错误处理有些破坏结构。
- async:async函数是Generator的语法糖,结合Promise将Generator自动化并返回Promise实例,通过await来分阶段,缺点是会阻塞,错误处理没有优化。
三、总结
现在Generator主要用来模仿线程操作(redux-saga)和生成Iterator对象,处理异步任务基本结合使用async和Promise。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Spring Boot + Spring Kafka配置公网接入阿里云Kafka
场景说明 今天接到的一个任务是做公网接入阿里云的kafka。不推荐通过公网访问。 由于通过公网问,需要配置为客户端接入配置SASL_SSL的鉴权,设置证书,协议,访问模式的账号密码等参数。 自己的应用采用的是spring boot + spring kafka来接入kafka。 因此,在配置上需要做一些适配和调整。 官方文档 https://help.aliyun.com/knowledge_detail/99958.html 原生的配置,主要有几个点: 在控制台下载ssl证书 ---- kafka.client.truststore.jks,放在机器的某个路径上,不要跟着应用打包 构建 kafka_client_jaas.conf,它包含着登录模式,登录用账号密码等的信息,账号密码信息在控制台上能找到。将应用启动参数java.security.auth.login.config设置为kafka_client_jaas.conf的绝对路径,可以通过代码或者启动参数设置。 注意 : spring boot配置中可以不需要的这个kafka_client_jaas.conf,它通过读取app...
- 下一篇
通过阶乘的例子,练习在JavaScript, Scala和ABAP里实现尾递归(Tail Recursion)
Before we start to research tail recursion, let’s first have a look at the normal recursion. A simple factorial implementation by recursion: function factorial(n){ if(n ===1) { return 1; } return n *factorial(n -1); } Let N = 5, see how new stack frame is created for each time of recursive call: We have two stack frames now, one stores the context when n = 5, and the topmost one for current calculation: n = 4 Now since n equals to 1, we stop recursion. The current stack frame ( n = 1 ) will be p...
相关文章
文章评论
共有0条评论来说两句吧...