防止alert()停止执行JavaScript

时间:2015-10-18 20:54:59

标签: javascript

首先,我知道JavaScript是单线程的。 假设我有一个计数器,每秒输出一次值。

var counter = 0;
setInterval(function(){
        console.log("Interval:  " + ++counter);

    }, 1000);

在某些时候,我想触发一些停止执行脚本的代码。 例如,一条警报消息。

setTimeout(function(){
    alert("Some alert message");
},10000);

此时弹出警报消息时,间隔代码将暂停。 有没有技巧,所以它不会停止执行?

2 个答案:

答案 0 :(得分:1)

首先:你知道如果代码没有停止,弹出窗口会在屏幕上叠加到无穷大吗?

警报主要用于简单的网页和调试目的(它是最简单的断点)。如果您想在我们的网站上通知用户,请使用某个框架或只创建HTML popup。我刚刚需要这个并下载了Jquery UI framework。我并不是那种在任何地方都使用jQuery的人,但是在浏览器中使用HTML弹出窗口非常简单而且很乏味。

在JQuery UI中你只需:

HTML:

<div id="my-dialog">Interval: <span id="counter">0</span></div>

的JavaScript:

// Configure the div as dialog, call this only once
$("#my-dialog").dialog({modal:true,
                        autoOpen: false,
                        buttons: {
                          Ok: function() {
                            $( this ).dialog( "close" );
                          }
                        }
});
var counter = 0;

var intervalID = setInterval(function() {
  // Update counter info
  $("#count").html(++counter);
  // Show dialog
  $("#my-dialog").dialog("open");

}, 1000);

Demo

答案 1 :(得分:1)

根据您需要支持的浏览器(选中browser compatibility),您可以使用WebWorkers在并行线程中执行脚本。您只需将代码拆分为单独的文件,以便在工作线程中运行的代码位于其自己的文件中。调整您的示例而不需要了解工作人员的详细信息,您可以设置包含以下代码的文件worker.js

// file worker.js
var counter = 0;
setInterval(function(){
        console.log("Interval:  " + ++counter);

        // The worker will live until you kill it.
        if (counter > 100) self.close();  
}, 1000);

然后,您的主JavaScript文件将设置新工作程序,使其在单独的工作线程中运行。

// Set up the new worker in a separate thread.
var worker = new Worker("worker.js");

setTimeout(function(){
    // This will not stop the worker from logging to console.
    alert("Some alert message");
},10000);

因此,主线程中的alert()将不会停止执行工作线程,这将继续记录到控制台。

有关现场演示,请参阅此Plunk