3

为什么js在试图用新的语法解决异步问题?

 2 years ago
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在试图用新的语法解决异步问题?

本人是做后端的,但最近在看一个js项目。了解了一些js相关的的东西,包括:1. 模块化编程(CommonJs, AMD, CMD),2. js解决动态…
18
3,907
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

新的语法是为了简化使用promise

与异步的关系仅在于promise经常用来控制异步流程

在搞 Electron 和 CEP

既然要实现同步效果,那应该是函数提供者去解决啊(比如ajax就是提供同步和异步两种配置)

ajax就是提供同步和异步两种配置,那是真的就是同步和异步切换,阻塞变非阻塞。

而 async/await,并不是将同步代码变成异步代码或者将异步代码变成同步代码,它的作用是让你通过这种新语法使用 "同步的写法" 去组织异步代码,也就是说异步代码还是异步代码,只不过写法上看起来像是同步的,其实还是非阻塞的。

你不会以为下面这个代码的输出就是先输出 "After 1 second" 再输出 "start" 吧?这里代码虽然是同步写法但本质上还是异步代码。不用回调写你是不是就觉得没法写异步代码了?

v2-c4cca3f6fc19399a749e66df829ae0d8_720w.jpg?source=1940ef5c

你这里说的这俩根本毫无关系,如果不能理解,你应该先去把什么是异步了解清楚,再去了解从回调炼狱 到 Promise 到 async/await 的历史。

什么叫“实现同步效果”?整个线程不做其他事,专门等操作完成?

要知道 JS 是单线程的,要是等操作完成就不能处理用户输入——不管用户是按鼠标、按键盘、按触摸屏,网页都没法做出反应,时间长了就是俗称的“卡死”。

(当然用 Worker 没这个问题,不过 Worker 也有开销。)

异步不是问题,它是“有些操作不能短时间完成,又不能一直等着它完成”的必然结果。await语法就是尽可能让异步写起来和同步一样好看。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK