我有一个非标准场景,我正在制作嵌入式电子书阅读器,该阅读器使用WebView显示本地HTML EPUB文件。
我要做的是通过ajax加载所有HTML文件,解析其内容并将其附加到身体上,Ajaxes区域很快,但是可以在附加的回调需要一些时间。它们并行运行,但回调同步运行,在同一JS线程上,并通过消息循环排队。
否我需要取消此操作,,但是由于取消呼叫只是另一个已排队的消息,因此显然在所有回调完成后运行,这显然对我没有用。从JavaScripts事件队列中清除这些回调的方法?
谢谢
var requestsInFlight;
loadAllSpineElements = function(spineElementsCount) {
requestsInFlight = new Set();
for (i = 0; i < spineElementsCount; i++) {
loadAndAppendSpineElement(innerWrapperDiv, pageCounts, requestsInFlight, i);
}
};
loadAndAppendSpineElement = function(innerWrapperDiv, pageCounts, requestsInFlight, spineElementIndex) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// Long running dom operation
requestsInFlight.delete(this);
if (requestsInFlight.size <= 0) {
handleAllSpinesLoaded(pageCounts);
}
}
};
xhttp.open("GET", "file:///localurl");
xhttp.send();
requestsInFlight.add(xhttp);
};
cancelAll = function() {
if (requestsInFlight) {
for (var it = requestsInFlight.values(), ajax = null; ajax = it.next().value;) {
ajax.abort();
requestsInFlight.delete(ajax);
}
}
};
否,但是如果它们被执行,则可以取消它们。例如:
var cancel = false;
setInterval(function(){
if(cancel) return;
alert("wohoo");
},1000);
所以,如果您想取消事件:
cancel = true;