当前位置: 首页 > 面试题库 >

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

骆照
2023-03-14
问题内容

我正在从服务器动态加载代码(函数),并将其作为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的东西。


问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 我知道,在同一句子中使用JavaScript和’atomic’一词有点奇怪,因为JavaScript被认为是异步的,因此不是很原子。 //编辑这是我的错误!通过关闭警报(并在chrome中隐藏其他警报),警报迅速中断并让其他代码运行。JavaScript是单线程的。 快速- >实际问题; 在哪种情况下,我们可以从异步回调中断中保存代码,如何防止某些代码块使用它们? 长- >我的场景;

  • 如果这被认为是一个可接受的实践,我需要什么-如果有-错误处理?我的理解是,task.wait()将重新抛出异步操作抛出的任何异常,并且我没有提供任何取消异步操作的机制。仅仅调用task.wait()就足够了吗?

  • 我从http://docs.oracle.com/javaee/7/tutorial/doc/servlets012.htm Java EE为servlet和过滤器提供异步处理支持。如果servlet或过滤器在处理请求时达到潜在的阻塞操作,它可以将该操作分配给异步执行上下文,并将与请求相关联的线程立即返回到容器,而不生成响应。阻塞操作在不同线程的异步执行上下文中完成,该线程可以生成响应或将请求分派

  • 问题内容: 我正在尝试在辅助项目中使用s,而不是在整个网络代码中乱扔基于闭包的回调,以帮助消除嵌套调用。因此,我在阅读有关该主题的文章时,遇到了此实现: 我希望对该子类有一些实现细节,以帮助他们理解。 该物业的目的是什么?我看到它是由计算属性使用和的,但是我找不到任何说明它们使用的和方法的文档。 返回部分中的三个类方法的目的是什么?我看不到它们在任何地方都被使用过。我在中找到了,但似乎并不能帮助我

  • 问题内容: 我对JavaScript 的本机实现有疑问:它是否异步运行?例如,如果我打电话: 这将是非阻塞的吗? 问题答案: 不,它正在阻止。看一下算法的规格。但是,在MDN上给出了一个可能更容易理解的实现: 如果必须为每个元素执行很多代码,则应考虑使用其他方法: 然后调用: 那时这将是非阻塞的。该示例摘自 High PerformanceJavaScript 。

  • 本文向大家介绍MySQL8.0 DDL原子性特性及实现原理,包括了MySQL8.0 DDL原子性特性及实现原理的使用技巧和注意事项,需要的朋友参考一下 1. DDL原子性概述 8.0之前并没有统一的数据字典dd,server层和引擎层各有一套元数据,sever层的元数据包括(.frm,.opt,.par,.trg等),用于存储表定义,分区表定义,触发器定义等信息;innodb层也有自己一套元数据,