前端知识点

关于Js的promise、generator、async、awa

2020-04-20  本文已影响0人  Martain

关于Js的promise、generator、async、await

第一章 前言

​ 大家都知道Javascript是单线程的,而且他的耗时操作是异步的,比如网络请求以及IO操作。在一般来说,我们比较喜欢他的异步,因为异步效率比较高,资源得到了合理的利用,但是有的时候我们为了控制流程,而且流程里面存在一些耗时操作,如果还是使其异步的话就会使得我们的流程非常难控制,所以这个时候我们就要同步执行我们的耗时操作。

第二章 关于单线程

​ 有的时候我会想,javascript既然是单线程的,那为什么他又可以异步的呢?(因为作为小白的我的认知来说,异步就是开个新的线程去执行这个耗时任务 o(╥﹏╥)o)

​ 这里就有一个主线程的概念了,所谓单线程就是Javascript 引擎在解释、处理javascript代码的线程只有一个,这个线程就是主线程。实际上浏览器还存在其他线程,比如处理网络请求、处理DOM等的线程,这些线程称为工作线程,这里说的单线程的意思是javascript无论什么时候都只有一个线程在运行javascript程序

这样的好处就是javascript的单线程简化了处理事件的机制,不必理会资源竞争和线程同步这些复杂的问题。

第三章 关于同步、异步、阻塞、非阻塞

同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

第四章 异步编程的四种方式

"异步模式"非常重要。在浏览器端,耗时很长的操作都应该异步执行,避免浏览器失去响应,最好的例子就是Ajax操作。在服务器端,"异步模式"甚至是唯一的模式,因为执行环境是单线程的,如果允许同步执行所有http请求,服务器性能会急剧下降,很快就会失去响应。 ------摘自 阮一峰

第五章 关于Promise

​ Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。

​ 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

第六章 关于Generator

Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。

第七章 async和await

ES2017 标准引入了 async 函数,使得异步操作变得更加方便。

async 函数是什么?一句话,它就是 Generator 函数的语法糖。

1、正常情况下,await命令后面是一个 Promise 对象,返回该对象的结果。如果不是 Promise 对象,就直接返回对应的值。

2、根据语法规则,await命令只能出现在 async函数内部,否则都会报错。

3、await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try...catch代码块中。

第八章 注意

参考资料

阮一峰 异步编程的四种方法

阮一峰 promise

阮一峰 generator

阮一峰 async

上一篇下一篇

猜你喜欢

热点阅读