众所周知,JavaScript在所有现代浏览器实现中都是单线程的,但是它是在任何标准中指定的还是仅仅是传统的?假设JavaScript始终是单线程的,这是完全安全的吗?
我从服务器动态加载代码(函数)并将其作为javascript代码执行,然后将其存储在数组中并执行.所有这些代码片段必须只执行一次.伪造的代码如下
function fetch(foo){
if (foo in fooArray){
//Do Nothing
else{
//Fetch foo via Ajax and execute foo()
}
}
Run Code Online (Sandbox Code Playgroud)
问题要复杂得多,但基本上如果我发出以下命令
fetch('someFunctionName');
fetch('someFunctionName');
fetch('someFunctionName');
fetch('someFunctionName');
Run Code Online (Sandbox Code Playgroud)
所有四个都将执行if (foo in fooArray)并假设它不在数组中,并且所有四个将继续获取代码并执行它.我记得当天回来学习信号量和互斥量,是否有javascript这样的东西.
假设我有一个事件处理程序,它对服务器进行两次AJAX调用:
$("#foo").click(function(){
$.get("bar", function(){ alert("Hello"); });
$.get("baz", function(){ alert("World"); });
});
Run Code Online (Sandbox Code Playgroud)
我意识到调用回调的顺序是不确定的,因为它取决于每个请求需要多长时间等.
但这是我的问题:是否保证在调用任何一个回调函数之前我将到达事件处理程序的末尾?我已经读过一个页面的所有Javascript都在一个线程中执行,所以我认为这意味着我click可以保证在调用任何回调之前完成我的事件处理程序.
它是否正确?或者第一个请求是否可能完成并且在我们甚至到达事件处理程序结束之前执行了第一个回调?
我有一个Javascript对象创建如下:
var ccStatTracker = (function (){
ccmap:{
"1":["1","2","3","4"],
"2":["4","5"];
}
return {
modifyCCMap: function (){
// Code which takes following actions:
// - adds/removes keys.
// - modifies arrays stored as values against the keys in the map.
}
}
)();
Run Code Online (Sandbox Code Playgroud)
我有一个DHTMLXGrid组件,它以行和列的形式显示网格.当我编辑网格中的任何单元格时,会调用"onEditCell"事件.现在,我想从附加到"onEditCell"事件的事件处理函数调用ccStatTracker.modifyCCMap().当我继续修改单元格时,这个事件将被异步调用,这将调用一个函数"modifyCCMap",它将修改我的Javascript对象的私有成员"CCMap".因此,两次调用看到的CCMap的最新状态可能不同吗?那么处理这个问题的最佳方法是什么?Javascript和Java中有"同步"的东西吗?
请帮助我,因为它将决定我们为实现这一目标而采取的方法.
我正在使用 jqGrid,最新版本,当我应用自定义函数的编辑规则并执行 ajax 时,它总是返回“自定义函数应始终返回一个数组”。我认为这是一个时间问题,所以我将 ajax 设置为 false 但仍然存在问题。任何人都有一个自定义函数,可以执行正常工作的 ajax 调用。感谢任何帮助。谢谢你。
jQuery(softwareReportingGrid.gridId).jqGrid({
editurl: 'clientArray',
datatype: 'json',
colNames: ["Car"],
colModel: [
{"index":"Car","name":"Car","edittype":"text","editable":true,
"editrules":{"custom":true,"custom_func":validateCar,"required":true}}
....
Run Code Online (Sandbox Code Playgroud)
我有以下 javascript 函数,它被称为
validateCar: function (value, colname) {
jQuery.ajax({
async: false,
url: validateCarUrl,
data: { carName: value },
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data) {
if (data) {
return [true, '']
} else {
return [false, value + ' is not a valid car'];
}
},
error: function () { alert('Error trying to validate …Run Code Online (Sandbox Code Playgroud) javascript ×5
ajax ×3
asynchronous ×2
atomic ×1
concurrency ×1
jqgrid ×1
members ×1
synchronized ×1