2
self.showPanel();
self.updateSliderValue();

self.addPoints(1,2,3);

self.setOptions();
self.removeValues();

addPoints方法向应用程序添加点并且需要相当多的时间,所以我希望它在后台运行并且应用程序转到setOptions它下面的其他功能。请帮忙。

4

2 回答 2

7

javascript 是一个单线程应用程序,这意味着没有什么可以像后台线程一样运行。

你可以做的是addPoints在主函数完成后运行该函数,你可以使用setTimeout来做到这一点

setTimeout(function(){
    self.addPoints(1,2,3);
}, 0)

这将推迟执行,addPoints直到当前脚本执行结束。

于 2013-06-20T03:43:37.637 回答
2

浏览器端有一些选项(假设客户端由于 jquery 标记而存在)

首先,您也许可以利用 setImmediate:

https://developer.mozilla.org/en-US/docs/Web/API/window.setImmediate

其次,您可以使用计时器并将其拆分,这是一个非常简单的示例,然后如果您想处理更多的东西,只需不时将它们塞入 thingstodoarray 中。关于此的许多排列中的任何一种。

    int howoftentocheck = 60*1000; //60s
    var thingstodoarray = [];
    thingstodoarray.push("do this");

    function checkForStuffToDo(){   
        if(thingstodoarray.length){
            //.. do things be sure and pop or shift the thing you did.
       }else{
           setTimeout(function() { checkForStuffToDo() }, howoftentocheck)
       }
    }();

第三,您可以使用事件而不是轮询,因此注册事件,例如使用 jQuery 或其他提供事件的库,然后您可以在想要进行一些处理时触发它们,例如使用 .on 和 .trigger 。

http://api.jquery.com/trigger/

我敢肯定还有其他几种选择,但目标是保持事件循环紧密,以免影响用户体验等。

于 2013-06-20T03:52:40.997 回答