小编典典

是否有任何原子性javascript操作来处理Ajax的异步性质?

ajax

我正在从服务器动态加载代码(函数),并将其作为javascript代码执行,然后将其存储在数组中并执行。所有这些代码片段都必须执行一次。伪代码如下

function fetch(foo){
    if (foo in fooArray){
          //Do Nothing
    else{
          //Fetch foo via Ajax and execute foo()
    }
}

这个问题要复杂得多,但是基本上,如果我发出以下命令

fetch('someFunctionName');
fetch('someFunctionName');
fetch('someFunctionName');
fetch('someFunctionName');

所有这四个将执行if (foo in fooArray)并假定它不在数组中,并且所有四个将继续获取代码并执行它。我记得当初学习信号量和互斥量的时候,有没有关于javascript的东西。


阅读 317

收藏
2020-07-26

共1个答案

小编典典

JavaScript是一种不错的语言,可以很好地与异步回调,超时,间隔和用户事件一起使用,但没有任何并发​​问题。这是可能的,因为JavaScript本质上是单线程的-
给定的代码段始终是原子执行的,并且永远不会被运行JavaScript的另一个线程中断。

您的fetch()函数将始终不间断地执行。如果它是作为AJAX回调的一部分执行的,并且有多个AJAX回调未决,则它们将排队。

另一个例子:如果您为输入元素分配了事件处理程序,并且一次触发了多次事件,则事件处理程序将不会同时执行。而是将它们排队并按顺序执行。这也适用于setTimeout()/
触发的多个事件setInterval()

附带说明:这是node.js如此强大的原因之一:它仅使用单线程,并且从不在I /
O上阻塞,而是在数据准备就绪/事件发生时使用回调。

2020-07-26