如何在JavaScript事件队列中预递消息?(取消长期运行方法)



我有一个非标准场景,我正在制作嵌入式电子书阅读器,该阅读器使用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;

相关内容

  • 没有找到相关文章

最新更新