关于异步

简介:

一、概述

js的执行环境是‘单线程’的,异步操作是至关重要的。异步任务就是任务需要分阶段完成,各阶段可以插入其他任务,否则就是同步任务。

二、实现

js处理异步任务主要分了3个阶段:

  1. 回调函数:异步任务拆分成多个阶段的代码,将这些代码用函数包裹以便在满足条件的时候继续异步任务,该函数被称为回调函数。这样处理主要缺点是:异步任务的逻辑被拆分了,异步任务嵌套异步任务后会形成‘回调地狱’,代码耦合程度太高。
  2. Promise和Generator:Promise是回调函数的语法糖,主要解决‘回调地狱’的问题。Generator的特性类似‘协程’,目前的实现只能说是‘半协程’,只有Generator的实例有执行权。Generator通过yield来将异步任务分阶段,每一个阶段结束都会保留当前的执行上下文,调用next方法执行下一个阶段。缺点就是需要手动执行next,错误处理有些破坏结构。
  3. async:async函数是Generator的语法糖,结合Promise将Generator自动化并返回Promise实例,通过await来分阶段,缺点是会阻塞,错误处理没有优化。

三、总结

现在Generator主要用来模仿线程操作(redux-saga)和生成Iterator对象,处理异步任务基本结合使用async和Promise。

目录
相关文章
|
前端开发 JavaScript UED
|
前端开发
异步转同步的几种方法
在循环等待中,我们可以使用一个变量来指示异步操作是否已完成。然后,我们可以在循环中检查该变量,如果它指示异步操作已完成,则退出循环。
548 0
|
6月前
|
负载均衡 算法 前端开发
同步和异步
同步和异步
85 0
|
6月前
|
Python
同步和异步的区别
同步和异步的区别
|
JavaScript 前端开发 UED
同步和异步区别
同步和异步区别
145 0
|
6月前
|
存储 JavaScript 前端开发
|
C#
C#异步详解
c#异步编程原理,await asnyc的使用方法
59 0
|
存储 SQL 设计模式
C#异步有多少种实现方式?
C#异步有多少种实现方式?
|
前端开发
21、同步与异步(三种方法)
21、同步与异步(三种方法)
144 0
|
XML 前端开发 JavaScript