Javascript被认为是单线程的。另外,AJAX被认为是异步的。
考虑一个场景;
我有一个按钮,点击它,我进行了一个AJAX调用,这需要5-6秒。现在,UI将不会被阻塞,用户将执行其他操作(比如单击另一个按钮,该按钮现在正在执行一些代码,同时返回AJAX响应)。现在,在本例中,由于其他代码正在执行,AJAX回调将在何时执行?它是必须等待,还是可以在并行线程中执行?
发布于 2015-01-13 21:47:20
事件是排队的,所以当Ajax调用完成时,它的处理程序将排队等待在事件循环上运行。当单个线程处理完按钮处理程序后,它将处理队列中的下一个事件。因此,您必须等待按钮单击引发的代码完成,除非Ajax请求在用户单击按钮之前完成,在这种情况下,按钮单击处理程序必须等待。你能做的最好的就是拆分你的算法,这样它就可以在离散的块中运行,这些块可以使用setTimeout放到队列中,但这是相当棘手的。
发布于 2015-01-13 22:05:04
因此,我对这个主题进行了一些搜索。与我想象的相反,javascript一点也不像多线程。相反,它有一个它执行的操作队列。
直接的答案是:根据非常精确的时间,AJAX回调可能必须在事件完成之前等待。它可能还必须等待在“同一时刻”执行的任何其他代码。
这就解释了为什么像while(true)或alert()这样的东西会停止站点上的所有脚本。
https://stackoverflow.com/questions/27923487
复制相似问题