单线程Javascript和AJAX处理

时间:2015-01-13 13:38:53

标签: javascript ajax multithreading

据说Javascript是单线程的。据说AJAX也是异步的。

考虑一个场景;

我有一个按钮,点击它,我做了一个AJAX调用,需要5-6秒。现在UI不会被阻止,用户会做一些其他操作(比如点击另一个按钮,现在正在执行一些代码,同时返回了AJAX响应)。现在在这种情况下,由于正在执行其他代码,何时执行AJAX回调?是否必须等待或者是否可以在并行线程中执行?

2 个答案:

答案 0 :(得分:1)

事件已排队,因此当Ajax调用完成时,该处理程序将排队等待在事件循环上运行。使用按钮处理程序完成单个线程后,它将处理队列中的下一个事件。所以 - 你必须等待按钮点击完成后启动的代码,除非在用户点击按钮之前完成Ajax请求,在这种情况下按钮点击处理程序必须等待。您可以做的最好的事情是拆分算法,使其以离散的块运行,可以使用setTimeout将它们放到队列中,但这非常棘手。

答案 1 :(得分:0)

所以我总体上对这个话题进行了一些搜索。与我想象的相反,javascript就像多线程一样。相反,它有一个它执行的操作队列。

直接答案是:根据非常准确的时间,AJAX回调可能必须等待点击事件完成。它也可能必须等待在" 同时执行的任何其他代码"。

这解释了while(true)alert()等内容停止网站上的每个脚本