我如何使用JavaScript编写阻塞同步方法?(How do I write a blocking

2019-07-29 07:45发布

我试图模拟出这需要很长的时间用于测试的方法,但不能找到一个好办法在Javascript做到这一点。 除了写一个很长的for循环有什么好办法?

Answer 1:

怎么样一个循环,检查时间 ?

function sleep(milliSeconds){
    var startTime = new Date().getTime();                    // get the current time
    while (new Date().getTime() < startTime + milliSeconds); // hog cpu until time's up
}


Answer 2:

你可以做一个同步AJAX调用会推迟你的脚本的要求一定量的时间响应的服务器。 但是请注意,这种方法不会在Firefox中工作,因为它不支持同步AJAX调用。

只需使用在客户端上这个简单的功能:

function sleep(microseconds) {
    var request = new XMLHttpRequest;
    request.open("GET", "/sleep.php?time=" + milliseconds);
    request.send();
}

对于代码sleep.php在服务器端:

usleep(intval($_GET("sleep")));

现在,您可以创建阻止同步功能在JavaScript(与Firefox的除外)如下:

alert("Hello");
sleep(1000000); // sleep for 1 second
alert("World");


Answer 3:

如果可以使用较新的await / AWAIT语法:

function sleep (time) {
  return new Promise((resolve) => setTimeout(resolve, time));
}

async function example() {
    await sleep(4000);
    return 1;
}

console.log(await example());


文章来源: How do I write a blocking synchronous method in Javascript?