IT

sleep()의 JavaScript 버전은 무엇입니까?

itgroup 2022. 11. 7. 21:27
반응형

sleep()의 JavaScript 버전은 무엇입니까?

더 나은 방법은 없을까?sleep보다 더 정보를 얻을 수 있습니다.pausecomp기능(여기서 취득)

function pausecomp(millis)
{
    var date = new Date();
    var curDate = null;
    do { curDate = new Date(); }
    while(curDate-date < millis);
}

이것은 JavaScript에서의 sleep의 반복이 아닙니다.동작간의 지연이 아닙니다.코드가 실행되기 전 지연이 아니라 함수 중간에 실제 sleep이 필요합니다.

2017 : 2021 갱신

이 질문이 제기된 2009년 이후 JavaScript는 크게 발전해 왔습니다.다른 모든 답변은 이제 구식이거나 너무 복잡합니다.현재의 베스트 프랙티스는 다음과 같습니다.

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

또는 원라이너로서:

await new Promise(r => setTimeout(r, 2000));

기능으로서:

const sleep = ms => new Promise(r => setTimeout(r, ms));

또는 Typescript:

const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));

사용처:

await sleep(<duration>);

데모:

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

async function demo() {
    for (let i = 0; i < 5; i++) {
        console.log(`Waiting ${i} seconds...`);
        await sleep(i * 1000);
    }
    console.log('Done');
}

demo();

주의해 주세요.

  1. await이 명령어는 프리픽스가 붙은 함수에서만 실행할 수 있습니다.async키워드를 지정하거나 스크립트의 최상위 레벨로 설정할 수 있습니다.
  2. await.async기능.즉, 스크립트의 나머지 실행은 차단되지 않습니다.이는 대부분의 경우에 필요한 것입니다.차단 구성을 원하는 경우 다음 답변을 참조하십시오..wait단, 대부분의 브라우저는 브라우저의 메인스레드에서는 이 기능을 사용할 수 없습니다.

두 가지 새로운 JavaScript 기능(2017년 기준)이 이 "sleep" 함수를 작성하는 데 도움이 되었습니다.

  • 약속, ES2015(ES6)의 네이티브 기능.슬립 기능의 정의에는 화살표 기능도 사용합니다.
  • 이 기능을 통해 코드는 확약(해결 또는 거부)을 명시적으로 대기할 수 있습니다.

호환성.

어떤 이유로 7보다 오래된 노드(2017년에 수명이 다한 노드)를 사용하고 있거나 오래된 브라우저를 대상으로 하고 있는 경우,async/awaitBabel(JavaScript + 새로운 기능을 일반 이전 JavaScript로 변환하는 도구)을 통해 플러그인과 함께 사용할 수 있습니다.

(2016년 최신 답변 참조)

저는 어떤 행동을 하고 싶어하고, 기다렸다가 다른 행동을 하고 싶어 하는 것이 전적으로 합리적이라고 생각합니다.멀티 스레드 언어로 쓰는 데 익숙하다면 스레드가 웨이크업될 때까지 일정 시간 동안 실행할 수 있습니다.

여기서의 문제는 JavaScript가 단일 스레드 이벤트 기반 모델이라는 것입니다.특정 상황에서는 엔진 전체를 몇 초 동안 대기시키는 것이 좋을 수 있지만, 일반적으로 이는 잘못된 관행입니다.내가 직접 쓰면서 너의 기능을 활용하고 싶다고 생각해?내가 네 방법을 불렀을 때, 내 방법은 모두 멈춰 버렸어.JavaScript가 어떤 식으로든 함수 실행 컨텍스트를 보존하고, 그것을 어딘가에 저장하고, 그것을 가져와 나중에 계속할 수 있다면, sleep이 발생할 수 있지만, 그것은 기본적으로 스레드화일 것이다.

즉, 다른 사람이 제안하는 내용에 거의 집착하고 있는 것입니다.여러 가지 기능으로 코드를 분할할 필요가 있습니다.

그렇다면 당신의 질문은 좀 잘못된 선택입니다.당신이 원하는 방식으로 잠을 잘 수 있는 방법도 없고, 당신이 제안하는 해결책을 추구해서는 안 된다.

JavaScript에서는 가능한 한 빨리 종료할 수 있도록 모든 기능을 다시 씁니다.브라우저를 다시 제어하여 DOM을 변경할 수 있도록 해야 합니다.

싶을 마다 '이 들다', '잠이 들다', '잠이 들다'를 사용하도록 .setTimeout().

편집

어떤 언어든 악명 높은 수면, 즉 지연 기능은 많은 논란이 되고 있다.어떤 사람들은 주어진 기능을 실행하기 위한 신호나 콜백이 항상 존재해야 한다고 말하지만, 다른 사람들은 때때로 임의의 지연의 순간이 유용하다고 주장합니다.나는 그들 각자에게 말하고 하나의 규칙은 이 산업에서 결코 어떤 것도 지시할 수 없다고 말한다.

슬립 기능을 쓰는 것은 간단하며 JavaScript Promites를 사용하면 더욱 편리해집니다.

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

// Usage!
sleep(500).then(() => {
    // Do something after the sleep!
});

Firebug(및 다른 JavaScript 콘솔)에서는 Enter 키를 누른 후 지정된 sleep 시간(...) 후에만 아무 일도 일어나지 않습니다.

function sleepFor(sleepDuration){
    var now = new Date().getTime();
    while(new Date().getTime() < now + sleepDuration){ /* Do nothing */ }
}

사용 예:

function sleepFor(sleepDuration){
    var now = new Date().getTime();
    while(new Date().getTime() < now + sleepDuration){ 
        /* Do nothing */ 
    }
}

function sleepThenAct(){
    sleepFor(2000);
    console.log("Hello, JavaScript sleep!");
}

sleepThenAct()

주의: 디버깅개발 전용

나는 다른 포스터에 동의한다.잠을 너무 많이 자는 것은 좋지 않은 생각이다.

그러나 setTimeout은 실행을 지연시키지 않습니다.타임아웃이 만료된 직후가 아니라 타임아웃이 설정된 직후에 함수의 다음 행이 실행되므로 sleep과 같은 작업이 수행되지 않습니다.

그 방법은 기능을 전후로 분할하는 것입니다.

function doStuff()
{
  // Do some things
  setTimeout(continueExecution, 10000) // Wait ten seconds before continuing
}

function continueExecution()
{
   // Finish doing things after the pause
}

기능명이 각 기능의 기능을 정확하게 기술하고 있는 것을 확인합니다(GatherInput 등).다음으로 funcPart1과 funcPart2가 아닌 Wait와 CheckInput을 실행한다.)

이 방법에서는 타임아웃이 끝날 까지 코드 행을 실행하지 않고 클라이언트 PC로 제어권을 되돌려 큐잉된 다른 모든 것을 실행하는 것이 목적입니다.

코멘트에서 지적한 바와 같이, 이것은 루프에서는 절대 동작하지 않습니다.루프로 작동시키기 위해 멋진(추악한) 해킹을 할 수도 있지만, 일반적으로 그것은 끔찍한 스파게티 코드를 만들 뿐이다.

$DEITY' 'busy-wait sleep' 'Busy-wait sleep' 입니다. setTimeout ★★★★★★★★★★★★★★★★★」setInterval요한한건건

var showHide = document.getElementById('showHide');
setInterval(() => {
    showHide.style.visibility = "initial";
    setTimeout(() => {
        showHide.style.visibility = "hidden"
    }, 1000);
    ;
}, 2000);   
<div id="showHide">Hello! Goodbye!</div>

2초 간격으로 텍스트를 1초간 숨깁니다.setInterval 및 setTimeout을 사용하여 초당 텍스트를 표시하거나 숨기는 방법을 보여 줍니다.

(나처럼) JavaScript를 Rhino와 함께 사용하는 경우 다음을 사용할 수 있습니다.

try
{
  java.lang.Thread.sleep(timeInMilliseconds);
}
catch (e)
{
  /*
   * This will happen if the sleep is woken up - you might want to check
   * if enough time has passed and sleep again if not - depending on how
   * important the sleep time is to you.
   */
}

jQuery를 사용하는 경우 실제로 setTimeout의 래퍼에 지나지 않는 "지연" 플러그인을 만든 것입니다.

// Delay Plugin for jQuery
// - http://www.evanbot.com
// - © 2008 Evan Byrne

jQuery.fn.delay = function(time,func){
    this.each(function(){
        setTimeout(func,time);
    });

    return this;
};

그런 다음 예상대로 일련의 함수 호출에서 사용할 수 있습니다.

$('#warning')
.addClass('highlight')
.delay(1000)
.removeClass('highlight');

용도:

  await new Promise(resolve => setTimeout(resolve, 2000));

콜 기능이 비동기인 것을 확인합니다.이것은 확인되어 정상적으로 동작하고 있습니다.

sleep 솔루션(제품 코드가 아닌 개발 및 테스트용)도 검색했는데 다음 문서를 발견했습니다.

JavaScript sleep() 또는 wait()

...클라이언트측 솔루션에 관한 또 다른 기사: JavaScript sleep

「 」를 는, 「 」를 참조해 주세요.alert()경보가 표시되는 동안 코드도 일시 중지됩니다.

여기 있어요.코드대로 나쁜 개발자가 되지 말고 웹사이트에서 사용하세요.개발 유틸리티 함수입니다.

// Basic sleep function based on ms.
// DO NOT USE ON PUBLIC FACING WEBSITES.
function sleep(ms) {
    var unixtime_ms = new Date().getTime();
    while(new Date().getTime() < unixtime_ms + ms) {}
}

2021년 4월(Node.js 16+)부터의 새로운 프로미스 버전이setTimeout()사용할 수 있습니다.

import { setTimeout } from 'timers/promises'

const res = await setTimeout(2000, 'result')

console.log(res);  // Prints 'result'

@kigiri 감사합니다.공식 매뉴얼을 참조하십시오.https://nodejs.org/api/timers.html#timerspromisessettimeoutdelay-value-options

다음은 동기 XMLHttpRequest를 사용하는 간단한 솔루션입니다.

function sleep(n){
  var request = new XMLHttpRequest();
  request.open('GET', '/sleep.php?n=' + n, false);  // `false` makes the request synchronous
  request.send(null);
}

파일 sleep의 내용.php:

<?php sleep($_GET['n']);

지금 바로 전화:

sleep(5);

기존 서버 구현 사용

만약 독자적으로 어플리케이션서버를 가지고 있지 않다면(위의 PHP 스크립트의 경우), 대신 온라인 서비스를 사용할 수 있습니다.예:

function sleep(n) { 
    var request = new XMLHttpRequest();
    request.open('GET', 'http://httpstat.us/200?sleep=' + n, false);
    request.send(null);
};

sleep(1000);
console.log("one second delay completed.");

지지하다

false★★★★★★★★★★★★★★★★의 경우asynchronous파라미터, mdn주의:

메인 스레드의 동기 요구는 사용자 경험을 쉽게 중단시킬 수 있으므로 피해야 합니다.실제로 많은 브라우저는 메인 스레드 전체에서 동기 XHR 지원을 권장하지 않습니다.동기 요구는 워커에서 허용됩니다.

실제 지연 시간

인수로 전달되는 시간(밀리초)은 서버가 요청을 수신하고 응답을 보낼 때까지 대기하는 시간입니다.거기에 송신 및 서버 부하에 의한 지연이 추가된다.

인라이너:

(async () => await new Promise(resolve => setTimeout(resolve, 500)))();

500은 VM이 다음 코드 행으로 이동할 때까지 대기하는 시간(밀리초)입니다.

약간의 tldr;

기본적으로 약속을 생성하면 생성 시 데이터/응답이 사용 가능해지면 콜백에서 해결 방법을 참조할 수 있는 관찰 가능한 약속이 반환됩니다.은 '결심하다'를 통해 .setTimeOut후 되지 않을 가 더따라서 Blocking이 됩니다.500밀리초 후 해결은 실행되지 않습니다.이는 스레드 및 대부분의 경우 웹 페이지/노드 응용 프로그램의 UI 및 기타 진행 중인 작업이 차단되고 메인 스레드가 약속 해결을 기다리는 데만 사용되기 때문에 논블로킹(또는 다른 언어로 사용 가능한 비스레드 예약 sleep)과는 완전히 다릅니다.

첫 번째:

실행할 함수를 다음과 같이 정의합니다.

function alertWorld(){
  alert("Hello, World!");
}

다음으로 setTimeout 메서드를 사용하여 실행을 스케줄링합니다.

setTimeout(alertWorld, 1000)

두 가지 주의사항

  • 두 번째 인수는 밀리초 단위의 시간입니다.
  • 첫 번째 인수로서 괄호 없이 함수의 이름(참조)만 전달해야 합니다.

저는 개인적으로 심플한 것을 좋아합니다.

function sleep(seconds){
    var waitUntil = new Date().getTime() + seconds*1000;
    while(new Date().getTime() < waitUntil) 
        true;
}

그 후, 다음과 같이 합니다.

sleep(2); // Sleeps for 2 seconds

p5.js에서 스크립트를 작성하면서 페이크 로드 시간을 작성하기 위해 항상 사용하고 있습니다.

Atomics를 사용하여 2019년 업데이트.기다리다

Node.js 9.3 이후에서는 동작합니다.

Node.js에는 정확한 타이머가 필요했고, 이 타이머는 매우 효과적이었습니다.

다만 브라우저 지원은 극히 제한적인 것 같습니다.

let ms = 10000;
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);

몇 개의 10초 타이머 벤치마크를 실행했다.

set Timeout을 사용하면 최대 7000마이크로초(7밀리초)의 오류가 발생합니다.

Atomics에서는 오류가 600마이크로초(0.6밀리초) 미만인 것 같습니다.

2020 업데이트:개요

function sleep(millis){ // Need help of a server-side page
  let netMillis = Math.max(millis-5, 0); // Assuming 5 ms overhead
  let xhr = new XMLHttpRequest();
  xhr.open('GET', '/sleep.jsp?millis=' + netMillis + '&rand=' + Math.random(), false);
  try{
    xhr.send();
  }catch(e){
  }
}

function sleepAsync(millis){ // Use only in async function
  let netMillis = Math.max(millis-1, 0); // Assuming 1 ms overhead
  return new Promise((resolve) => {
    setTimeout(resolve, netMillis);
  });
}
function sleepSync(millis){ // Use only in worker thread, currently Chrome-only
  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, millis);
}

function sleepTest(){
  console.time('sleep');
  sleep(1000);
  console.timeEnd('sleep');
}

async function sleepAsyncTest(){
  console.time('sleepAsync');
  await sleepAsync(1000);
  console.timeEnd('sleepAsync');
}

function sleepSyncTest(){
  let source = `${sleepSync.toString()}
    console.time('sleepSync');
    sleepSync(1000);
    console.timeEnd('sleepSync');`;
  let src = 'data:text/javascript,' + encodeURIComponent(source);
  console.log(src);
  var worker = new Worker(src);
}

페이지 「」)를 참조해 주세요.sleep.jsp 의은 다음과 같습니다.

<%
try{
  Thread.sleep(Long.parseLong(request.getParameter("millis")));
}catch(InterruptedException e){}
%>

대부분의 사람들이 원하는 것처럼 보이게 하기 위한 더 나은 해결책은 익명의 기능을 사용하는 것입니다.

alert('start');
var a = 'foo';
// Lots of code
setTimeout(function(){  // Beginning of code that should run AFTER the timeout
    alert(a);
    // Lots more code
}, 5000);  // Put the timeout here

이것은 아마도 당신이 원하는 것을 간단히 할 수 있는 것에 가장 근접하게 될 것입니다.

주의: 여러 개의 sleep이 필요한 경우, 급하게 문제가 발생할 수 있으며 실제로 설계를 재고해야 할 수도 있습니다.

Promise를 사용원라이너

const wait = t => new Promise(s => setTimeout(s, t, t));

중단 신호가 있는 타이프 스크립트

const wait = (x: number, signal?: AbortSignal): Promise<number> => {
  return new Promise((s, f) => {
    const id = setTimeout(s, x, x);
    signal?.addEventListener('abort', () => {
      clearTimeout(id);
      f('AbortError');
    });
  });
};

데모

const wait = t => new Promise(s => setTimeout(s, t));
// Usage
async function demo() {
    // Count down
    let i = 6;
    while (i--) {
        await wait(1000);
        console.log(i);
    }
    // Sum of numbers 0 to 5 using by delay of 1 second
    const sum = await [...Array(6).keys()].reduce(async (a, b) => {
        a = await a;
        await wait(1000);
        const result = a + b;
        console.log(`${a} + ${b} = ${result}`);
        return result;
    }, Promise.resolve(0));
    console.log("sum", sum);
}
demo();

의존 관계가 없는 최단 솔루션:

await new Promise(resolve => setTimeout(resolve, 5000));

브라우저의 경우 setTimeout과 setInterval을 사용하는 것에 동의합니다.

그러나 서버측 코드의 경우 차단 기능이 필요할 수 있습니다(예를 들어 스레드 동기화를 효과적으로 수행할 수 있습니다).

Node.js Meteor 를 사용하고 있는 경우는, 파이버로 set Timeout 를 사용하는 제한에 직면했을 가능성이 있습니다.서버측 sleep의 코드는 다음과 같습니다.

var Fiber = require('fibers');

function sleep(ms) {
    var fiber = Fiber.current;
    setTimeout(function() {
        fiber.run();
    }, ms);
    Fiber.yield();
}

Fiber(function() {
    console.log('wait... ' + new Date);
    sleep(1000);
    console.log('ok... ' + new Date);
}).run();
console.log('back in main');

참조: Node.js 파이버, sleep

대부분의 답변은 잘못되었거나 최소한 구식입니다.JavaScript가 단일 스레드여야 할 이유는 없으며 실제로 그렇지 않습니다.오늘날 모든 메인스트림 브라우저는 워커를 지원합니다.이전에는 Rhino 및 Node.js와 같은 다른 JavaScript 런타임에서 멀티스레딩을 지원했습니다.

'JavaScript is single threaded'는 올바른 답이 아닙니다.예를 들어 작업자 내에서 sleep 기능을 실행해도 UI 스레드에서 실행 중인 코드는 차단되지 않습니다.

발전기와 수율을 지원하는 새로운 런타임에서는 단일 스레드 환경의 sleep 기능에 유사한 기능을 제공할 수 있습니다.

// This is based on the latest ES6 drafts.
// JavaScript 1.7+ (SpiderMonkey/Firefox 2+) syntax is slightly different

// Run code you want to sleep here (omit star if using JavaScript 1.7)
function* main(){
    for (var i = 0; i < 10; i++) {
        // To sleep for 10 milliseconds 10 times in a row
        yield 10;
    }

    yield 5;
    console.log('I just slept 5 milliseconds!');
}

// Resume the given generator after ms milliseconds
function resume(ms, generator){
    setTimeout(function(){
        // Omit .value if using JavaScript 1.7
        var nextSleep = generator.next().value;
        resume(nextSleep, generator);
    }, ms);
}

// Initialize a generator and get first sleep for the recursive function
var
    generator = main(),
    firstSleep = generator.next().value;

// Initialize recursive resume function
resume(firstSleep, generator);

이러한 수면의 모방은 실타래를 막지 않기 때문에 진정한 수면 기능과 다릅니다.이는 JavaScript의 현재 setTimeout 함수 위에 설탕만 얹은 것입니다.이 기능 유형은 Task.js에서 구현되었으며 현재 Firefox에서 작동합니다.

set Time을 캡슐화합니다.다른 비동기 태스크와의 코드 일관성에 대한 약속:바이올린 데모

function sleep(ms)
{
    return(new Promise(function(resolve, reject) {
        setTimeout(function() { resolve(); }, ms);
    }));
}

다음과 같이 사용됩니다.

sleep(2000).then(function() {
   // Do something
});

Promise 사용에 익숙하다면 구문을 기억하기 쉽습니다.

Node.js 7.6 이후부터,promisifyutils 모듈에서 기능합니다.setTimeout.

const sleep = require('util').promisify(setTimeout)

일반적인 사용법

async function main() {
    console.time("Slept for")
    await sleep(3000)
    console.timeEnd("Slept for")
}

main()

질문 사용법

async function asyncGenerator() {
    while (goOn) {
      var fileList = await listFiles(nextPageToken);
      await sleep(3000)
      var parents = await requestParents(fileList);
    }
  }

JavaScript sleep/wait에서 꽤 많은 웹 페이지를 검색/검색했습니다.JavaScript를 "RUN, DELAY, RUN"으로 하고 싶은 경우에는 "RUN, RUN(쓸데없는 것들)" 또는 "RUN, RUN + delayed RUN" 중 하나가 됩니다.

여기 효과적인 솔루션이 있습니다.하지만 실행 코드를 잘라내야 해- 네, 알아요. 리팩터링이 더 읽기 쉬울 뿐이에요.그래도...

예 1:

<html>
<body>
<div id="id1">DISPLAY</div>

<script>
// JavaScript sleep by "therealdealsince1982"; copyrighted 2009
// setInterval
var i = 0;

function run() {
    // Pieces of codes to run
    if (i == 0){document.getElementById("id1").innerHTML= "<p>code segment " + i + " is ran</p>"; }
    if (i == 1){document.getElementById("id1").innerHTML= "<p>code segment " + i + " is ran</p>"; }
    if (i == 2){document.getElementById("id1").innerHTML= "<p>code segment " + i + " is ran</p>"; }
    if (i >2){document.getElementById("id1").innerHTML= "<p>code segment " + i + " is ran</p>"; }
    if (i == 5){document.getElementById("id1").innerHTML= "<p>all code segment finished running</p>"; clearInterval(t); } // End interval, stops run
    i++; // Segment of code finished running, next...
}

run();
t = setInterval("run()", 1000);

</script>
</body>
</html>

예 2:

<html>
<body>
<div id="id1">DISPLAY</div>

<script>
// JavaScript sleep by "therealdealsince1982"; copyrighted 2009
// setTimeout
var i = 0;

function run() {
    // Pieces of codes to run, can use switch statement
    if (i == 0){document.getElementById("id1").innerHTML= "<p>code segment " + i + " ran</p>"; sleep(1000);}
    if (i == 1){document.getElementById("id1").innerHTML= "<p>code segment " + i + " ran</p>"; sleep(2000);}
    if (i == 2){document.getElementById("id1").innerHTML= "<p>code segment " + i + " ran</p>"; sleep(3000);}
    if (i == 3){document.getElementById("id1").innerHTML= "<p>code segment " + i + " ran</p>";} //stops automatically
    i++;
}

function sleep(dur) {t=setTimeout("run()", dur);} // Starts flow control again after 'dur'

run(); // Starts
</script>
</body>
</html>

예 3:

<html>
<body>
<div id="id1">DISPLAY</div>

<script>
// JavaScript sleep by "therealdealsince1982"; copyrighted 2009
// setTimeout
var i = 0;

function flow() {
    run(i);
    i++; // Code segment finished running, increment i; can put elsewhere
    sleep(1000);
    if (i == 5) {clearTimeout(t);} // Stops flow, must be after sleep()
}

function run(segment) {
    // Pieces of codes to run, can use switch statement
    if (segment == 0){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
    if (segment == 1){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
    if (segment == 2){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
    if (segment >2){document.getElementById("id1").innerHTML= "<p>code segment "+ segment +" is ran</p>"; }
}

function sleep(dur) {t=setTimeout("flow()", dur);} // Starts flow control again after 'dur'

flow(); // Starts flow
</script>
</body>
</html>

예 4:

<html>
<body>
<div id="id1">DISPLAY</div>

<script>
// JavaScript sleep by "therealdealsince1982"; copyrighted 2009
// setTimeout, switch
var i = 0;

function flow() {
    switch(i)
    {
        case 0:
            run(i);
            sleep(1000);
            break;
        case 1:
            run(i);
            sleep(2000);
            break;
        case 5:
            run(i);
            clearTimeout(t); // Stops flow
            break;
        default:
            run(i);
            sleep(3000);
            break;
    }
}

function run(segment) {
    // Pieces of codes to run, can use switch statement
    if (segment == 0){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
    if (segment == 1){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
    if (segment == 2){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
    if (segment >2){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
    i++; // Current segment of code finished running, next...
}

function sleep(dur) {t=setTimeout("flow()", dur);} // Starts flow control again after 'dur'

flow(); // Starts flow control for first time...
</script>
</body>
</html>

sleep 기능의 목적은 동시 실행이 필요한 경우라면 이해할 수 있습니다.setInterval 및 setTimeout 함수는 실행 시퀀스를 메인 프로그램으로 되돌리는 병렬 실행 스레드를 만듭니다.이러한 스레드는 지정된 결과를 기다려야 하는 경우에는 효과가 없습니다.물론 이벤트와 핸들러를 사용할 수도 있지만 의도한 것이 아닌 경우도 있습니다.

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

setTimeout ★★★★★★★★★★★★★★★★★」setInterval인수의 순서를 반대로 하는 함수로 정리하여 적절한 이름을 붙일 수 있습니다.

function after(ms, fn){ setTimeout(fn, ms); }
function every(ms, fn){ setInterval(fn, ms); }

CoffeeScript 버전:

after = (ms, fn)-> setTimeout fn, ms
every = (ms, fn)-> setInterval fn, ms

그런 다음 익명 기능을 사용하여 적절하게 사용할 수 있습니다.

after(1000, function(){
    console.log("it's been a second");
    after(1000, function(){
        console.log("it's been another second");
    });
});

"n밀리초 후", "n밀리초마다", "n밀리초마다", "..."로 쉽게 읽힙니다.

나는 이 방법을 이전 파이썬 개발자들에게 추천한다.

const sleep = (time) => {
   return new Promise((resolve) => setTimeout(resolve, Math.ceil(time * 1000)));
};

사용방법:

await sleep(10) // for 10 seconds

JavaScript에서는 그런 sleep을 할 수 없습니다.아니면 하지 말아야 합니다.sleep 또는 while 루프를 실행하면 루프가 완료될 때까지 사용자의 브라우저가 정지됩니다.

참조한 링크에 지정된 대로 타이머를 사용합니다.

언급URL : https://stackoverflow.com/questions/951021/what-is-the-javascript-version-of-sleep

반응형