![](/style/images/good.png)
![](/style/images/bad.png)
为什么js在试图用新的语法解决异步问题?
source link: https://www.zhihu.com/question/509456844/answer/2295174455
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
为什么js在试图用新的语法解决异步问题?
新的语法是为了简化使用promise
与异步的关系仅在于promise经常用来控制异步流程
既然要实现同步效果,那应该是函数提供者去解决啊(比如ajax就是提供同步和异步两种配置)
ajax就是提供同步和异步两种配置,那是真的就是同步和异步切换,阻塞变非阻塞。
而 async/await,并不是将同步代码变成异步代码或者将异步代码变成同步代码,它的作用是让你通过这种新语法使用 "同步的写法" 去组织异步代码,也就是说异步代码还是异步代码,只不过写法上看起来像是同步的,其实还是非阻塞的。
你不会以为下面这个代码的输出就是先输出 "After 1 second" 再输出 "start" 吧?这里代码虽然是同步写法但本质上还是异步代码。不用回调写你是不是就觉得没法写异步代码了?
![v2-c4cca3f6fc19399a749e66df829ae0d8_720w.jpg?source=1940ef5c](https://pic1.zhimg.com/80/v2-c4cca3f6fc19399a749e66df829ae0d8_720w.jpg?source=1940ef5c)
你这里说的这俩根本毫无关系,如果不能理解,你应该先去把什么是异步了解清楚,再去了解从回调炼狱 到 Promise 到 async/await 的历史。
什么叫“实现同步效果”?整个线程不做其他事,专门等操作完成?
要知道 JS 是单线程的,要是等操作完成就不能处理用户输入——不管用户是按鼠标、按键盘、按触摸屏,网页都没法做出反应,时间长了就是俗称的“卡死”。
(当然用 Worker 没这个问题,不过 Worker 也有开销。)
异步不是问题,它是“有些操作不能短时间完成,又不能一直等着它完成”的必然结果。await
语法就是尽可能让异步写起来和同步一样好看。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK