如何将消息预先发送到Javascript事件队列?(取消长时间运行的方法)

如何将消息预先发送到Javascript事件队列?(取消长时间运行的方法),javascript,prepend,eventqueue,Javascript,Prepend,Eventqueue,我有一个非标准的场景,我正在制作一个嵌入式电子书阅读器,它使用webview显示本地html epub文件 我所做的是通过ajax加载所有html文件,解析它们的内容并将它们附加到body,但是执行附加的回调需要一些时间。它们并行运行,但回调在同一个JS线程上同步运行,并通过消息循环排队 不,我需要取消此操作,但是,由于取消调用只是排队的另一条消息,这显然是在所有回调都完成后运行的,这显然对我没有任何用处。有没有办法从javascripts事件队列中清除这些回调或预先发送新消息 谢谢 var r

我有一个非标准的场景,我正在制作一个嵌入式电子书阅读器,它使用webview显示本地html epub文件

我所做的是通过ajax加载所有html文件,解析它们的内容并将它们附加到body,但是执行附加的回调需要一些时间。它们并行运行,但回调在同一个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-requestsInFlight;
loadAllSpineElements=函数(spineElementsCount){
requestsInFlight=新集合();
对于(i=0;i如果(requestsInFlight.size否,但如果它们被执行,您可以取消它们。例如:

var cancel = false;

setInterval(function(){
  if(cancel) return;
  alert("wohoo");
},1000);
如果你想取消这些活动:

cancel = true;

但是我的取消()函数在全部完成之前不会执行,我该如何更改该全局变量?@urSus可能没有填充事件队列?您的代码将有助于解决此问题…好的,我编辑了问题@Jonas w。我如何不填充它?这不是JS固有的用法吗?我不知道如何,我不能使用setInterval。我只想取消设置如果用户这样做,则执行操作。在您的情况下,是否会在回调运行时执行取消变异方法?