How do I write a blocking synchronous method in Javascript?

前端 未结 3 1364
情书的邮戳
情书的邮戳 2020-12-31 15:25

I\'m trying to mock out a method which takes a long time for testing purposes but can\'t find a good way to do this in Javascript. Any good approaches besides writing a very

相关标签:
3条回答
  • 2020-12-31 15:29

    How about a loop that checks time?

    function sleep(milliSeconds){
        var startTime = new Date().getTime();                    // get the current time
        while (new Date().getTime() < startTime + milliSeconds); // hog cpu until time's up
    }
    
    0 讨论(0)
  • 2020-12-31 15:34

    If you can use the newer await/await syntax:

    function sleep (time) {
      return new Promise((resolve) => setTimeout(resolve, time));
    }
    
    async function example() {
        await sleep(4000);
        return 1;
    }
    
    console.log(await example());
    
    0 讨论(0)
  • 2020-12-31 15:48

    You could make a synchronous AJAX call to a server which defers the response by a certain amount of time as requested by your script. Note however that this method won't work in Firefox as it doesn't support synchronous AJAX calls.

    Just use this simple function on the client side:

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

    The code for sleep.php on the server side:

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

    Now you can create blocking synchronous functions in JavaScript (with the exception of Firefox) as follows:

    alert("Hello");
    sleep(1000000); // sleep for 1 second
    alert("World");
    
    0 讨论(0)
提交回复
热议问题