我有一个非标准的场景,我正在制作一个嵌入式电子书阅读器,它使用 webview 来显示本地 html epub 文件。
我所做的是通过 ajax 加载所有 html 文件,解析它们的内容并将它们附加到 body,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);
}
}
};