单线程 Javascript 和 AJAX 处理

Single thread Javascript and AJAX handling

本文关键字:处理 AJAX Javascript 单线程      更新时间:2023-09-26

Javascript被认为是单线程的。AJAX也被认为是异步的。

考虑一个场景;

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

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

所以我对

这个话题进行了一些搜索。与我想象的相反,javascript与多线程完全不同。相反,它有一个执行的操作队列。

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

这解释了while(true)alert()停止站点上每个脚本之类的操作。