相关疑难解决方法(0)

JavaScript如何在后台处理AJAX响应?

由于JavaScript在单个线程中运行,在发出AJAX请求后,后台实际发生了什么?我想更深入地了解这一点,任何人都可以解释一下吗?

javascript xmlhttprequest

136
推荐指数
2
解决办法
2万
查看次数

我是否需要关注异步Javascript的竞争条件?

假设我加载了一些我将来会知道将要调用window.flashReady并将设置的Flash影片window.flashReadyTriggered = true.

现在我有一段代码,我想在Flash准备就绪时执行.如果window.flashReady已经被调用,我希望它立即执行它,如果尚未调用它我想把它作为回调window.flashReady.天真的方法是这样的:

if(window.flashReadyTriggered) {
  block();
} else {
  window.flashReady = block;
}
Run Code Online (Sandbox Code Playgroud)

因此我基于此的关注是,if条件中的表达式被评估为false,但之后block()可以执行,window.flashReady由外部Flash触发.因此,block永远不会被称为.

是否有更好的设计模式来实现我想要的更高级别目标(例如,手动调用flashReady回调)?如果没有,我是安全的,还是我应该做的其他事情?

javascript

14
推荐指数
3
解决办法
1万
查看次数

JavaScript 中的数据竞争?

假设我运行这段代码。

var score = 0;
for (var i = 0; i < arbitrary_length; i++) {
     async_task(i, function() { score++; }); // increment callback function
}
Run Code Online (Sandbox Code Playgroud)

从理论上讲,我理解这会带来数据竞争,并且尝试同时递增的两个线程可能会导致单个增量,但是,nodejs(和 javascript)已知是单线程的。我能保证得分的最终值等于任意长度吗?

javascript multithreading race-condition node.js

4
推荐指数
1
解决办法
2068
查看次数

JS事件处理程序能否中断另一个处理程序的执行?

我有以下问题.我已经在其构造函数中创建了一个类,我正在加载几个图像,我需要延迟剩余的初始化,直到它们被完全加载.我使用的代码如下(摘自构造函数):

var self = this;
var imagesToLoad = 4;

var finishInit = function() {
    alert(imagesToLoad);
    imagesToLoad--;
    if (imagesToLoad == 0) {
       // remaining initializations
    }
}

this._prevIcon = new Image();
this._prevIcon.onload = finishInit; 
this._prevIcon.src = "img1.png";
this._nextIcon = new Image();
this._nextIcon.onload = finishInit; 
this._nextIcon.src = "img2.png";
this._pauseIcon = new Image();
this._pauseIcon.onload = finishInit; 
this._pauseIcon.src = "img3.png";
this._playIcon = new Image();
this._playIcon.onload = finishInit; 
this._playIcon.src = "img4.png";
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,执行时显示的对话框在Firefox 7中读取4,4,4,4和在IE 9中读取4,3,2,4.我很困惑因为我认为JS是单线程的,因此是一个事件处理程序不应该打断另一个.捕获(或我的错误)在哪里?

提前致谢.此致,Tomek

javascript events

3
推荐指数
1
解决办法
3454
查看次数