所谓的异步请老师解释

所谓的异步请老师解释

请问老师所谓的异步代表的是什么

为什么我查阅资料 有人说异步是一边代码执行异步操作一边继续向下执行

这样不就是js成了多线程了吗?

我理解异步是js代码并不按照从上倒下的顺序执行,先执行完正常的再执行异步的操作。浏览器渲染可以多线程,js是单线程的没错吧。

请老师解释一下

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

1、js是单线程,所以程序的执行顺序就是从上到下依次执行,同一时间内只能有一段代码被执行。

2、ajax异步:ajax异步请求就当发出请求的同时,浏览器可以继续做任何事,Ajax发送请求并不会影响页面的加载与用户的操作,相当于是在两条线上,各走各的,互不影响。在异步模式下,当我们使用ajax发送完请求后,可能还有代码需要执行。这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为采用了异步执行方式,所有包含ajax请求代码的函数中的剩余代码将继续执行,如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候就好比两条线程同时执行一样。

比如说,当页面的单线程(js)执行xhr.send()之后,对于页面来说发送任务已经完成了,怎么发送,那是浏览器的事,和单线程无关,什么时候响应,这事说不准,为了及时地得到响应的内容,在单线程中注册相应的事件就好xhr.onreadystatechange = fn() {...},注册之后,浏览器会在内部的其他线程中自动地帮我们监听该事件,直到该事件被触发,浏览器会在任务队列中添加一个任务等待该单线程执行

希望可以帮到你~

  • hy_wang 提问者 #1
    老师任务队列中的代码是不是等待主线程所有代码执行完毕才会执行
    2018-10-15 12:09:56
  • hy_wang 提问者 #2
    有个小疑问~关于ajax,事件驱动这些异步操作我知道是加入队列,我想请问一下这个异步的队列,他是在所有的正常js代码执行之后才会执行这个对列还是说到了一定条件,比如定时器的时间到了就会插进正常代码的顺序进行执行?
    2018-10-15 12:24:25
  • hy_wang 提问者 #3
    老师在吗??就是我列举的意思,比如setTimeout(one,1000),1s后执行one。如果过了1s之后js代码还在执行也就是主线程还在占用。是不是得等所有js主线程代码结束之后才可以运行setTimeout,还是说setTimeout可以插队进行
    2018-10-15 17:38:11
Miss路 2018-10-14 13:19:34

1、js是单线程的,单线程和异步确实不能同时成为一个语言的特性。js选择了成为单线程的语言,所以它本身不可能是异步的,但js的宿主环境(比如浏览器,Node)是多线程的,宿主环境通过某种方式(事件驱动,下文会讲)使得js具备了异步的属性。

2、异步要和同步进行对比:

同步指的是一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。

异步指的是每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。

常见的异步有:1、点击时间,2、定时器,3、AJAX请求。

那么,ajax请求内容的时候是异步的,当请求完成后,会触发请求完成的事件,然后把回调函数放入callback ,等到主线程执行该回调函数时还是单线程的。

其实,回调函数也相当于异步操作,所以可以在函数A里面回调函数B。

如果帮助到了你,欢迎采纳!

  • 提问者 hy_wang #1
    L老师我不太懂、比如open这个方法他属于异步方法、那他究竟是怎么一个执行顺序可以举例吗
    2018-10-14 21:14:36
  • 提问者 hy_wang #2
    请问老师是不是这个意思 比如js识别到了xhr.open方法 也就是ajax的异步,代码的执行顺序也就是会正常执行open方法,但是关于open方法的回调callback也就是 onreadystatechange这个方法绑定的事件和接下来的代码一起执行是吗。 这个就是异步是吗。
    2018-10-14 21:30:31
  • 提问者 hy_wang #3
    还有请问一下老师所谓ajax的异步,比如在open方法中参数为true 异步操作。是不是就是说open方法之后 send() 等等数据的请求都是异步请求数据。send()方法也就变成了异步操作是吧
    2018-10-14 22:12:12
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师