Sleep () 'in JavaScript versiyonu nedir?


Al─▒nan cevaba git


Bir m├╝hendis i├žin daha iyi bir yolu var m─▒ sleep ┼ču daha JavaScript pausecomp (fonksiyonu buradan al─▒nan )?

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

Bu, JavaScriptÔÇÖte bir Uyku kopyas─▒ de─čildir ; eylemler aras─▒nda gecikme ; Bir i┼člevin ortas─▒nda ger├žek bir uyku istiyorum ve bir kod par├žas─▒n─▒n ├žal─▒┼čt─▒r─▒lmas─▒ndan ├Ânceki bir gecikme de─čil.


2057









Cevap say─▒s─▒n─▒ say: 30






2017 - 2019 g├╝ncellemesi

Bu sorunun soruldu─ču 2009'dan bu yana, JavaScript ├Ânemli ├Âl├ž├╝de geli┼čti. Di─čer t├╝m cevaplar art─▒k eski ya da a┼č─▒r─▒ karma┼č─▒k. ─░┼čte ┼ču anki en iyi uygulama:

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

async function demo() {
  console.log('Taking a break...');
  await sleep(2000);
  console.log('Two seconds later, showing sleep in a loop...');

  // Sleep in loop
  for (let i = 0; i < 5; i++) {
    if (i === 3)
      await sleep(2000);
    console.log(i);
  }
}

demo(); 

Budur. await sleep(<duration>) .

Bunu not et,

  1. await sadece async anahtar kelimeyle ├Ânceden belirlenmi┼č i┼člevlerde veya baz─▒ ortamlarda (├Ârne─čin, Chrome DevTools konsolu veya Runkit) beti─činizin en ├╝st seviyesinde ger├žekle┼čtirilebilir.
  2. await sadece ge├žerli async i┼člevi duraklat─▒r

─░ki yeni JavaScript ├Âzelli─či bu "uyku" i┼člevini yazmaya yard─▒mc─▒ oldu:

uygunluk

Garip bir nedenden ├Ât├╝r├╝ 7'den daha eski D├╝─č├╝m kullan─▒yorsan─▒z (kullan─▒m ├Âmr├╝ sona erdi ) veya eski taray─▒c─▒lar─▒ hedefliyorsan─▒z async / await hala Babil ( JavaScript + yeni ├Âzellikleri d├╝z eski JavaScript'e aktaran bir ara├ž ) ├╝zerinden kullan─▒labilir , transform-async-to-generator eklenti ile.


2032







( 2016 i├žin g├╝ncellenmi┼č cevaba bak─▒n─▒z )

Bence bir eylemde bulunmak, beklemek, ard─▒ndan ba┼čka bir eylem yapmak istemek olduk├ža mant─▒kl─▒. ├çok i┼č par├žac─▒kl─▒ dillerde yazmaya al─▒┼čk─▒nsan─▒z, i┼č par├žac─▒─č─▒ uyan─▒ncaya kadar belirli bir s├╝re i├žin uygulama yapma fikriniz vard─▒r.

Buradaki sorun, JavaScript'in tek i┼č par├žac─▒kl─▒ bir olaya dayal─▒ model olmas─▒d─▒r. Belirli bir durumda, t├╝m motorun birka├ž saniye bekletilmesi g├╝zel olabilir, genel olarak k├Ât├╝ bir uygulamad─▒r. Diyelim ki kendi yazarken i┼člevlerinizden yararlanmak istedim. Senin y├Ântemini arad─▒─č─▒mda, y├Ântemlerin hepsi donacakt─▒. JavaScript bir ┼čekilde i┼člevinizin y├╝r├╝tme i├žeri─čini koruyabildiyse, bir yere saklay─▒n, sonra geri getirin ve daha sonra devam edin, sonra uyku olabilirdi, ama bu asl─▒nda zorlay─▒c─▒ olurdu.

Bu y├╝zden ba┼čkalar─▒n─▒n ├Ânerdiklerine ├žok ┼ča┼č─▒r─▒p kalm─▒┼čs─▒n─▒z - kodunuzu birden fazla fonksiyona b├Âlmeniz gerekir.

O zaman sorunuz biraz yanl─▒┼č bir se├žim. ─░stedi─činiz ┼čekilde uyumak i├žin bir yol yoktur, ya da ├Ânerdi─činiz ├ž├Âz├╝m├╝ izlemelisiniz.


845







JavaScriptÔÇÖte her i┼člevi en k─▒sa zamanda bitebilecek ┼čekilde yeniden yazd─▒m. Taray─▒c─▒n─▒n kontrol├╝n├╝ geri almas─▒n─▒ istiyor, b├Âylece DOM de─či┼čikliklerini yapabiliyor.

Her zaman fonksiyonumun ortas─▒nda uyumak istedim, kullanmak i├žin yeniden ate┼čledim setTimeout() .

Bu cevab─▒ d├╝zenleyece─čim ├ž├╝nk├╝ bunu faydal─▒ buldum:

Herhangi bir dilde rezil uyku veya gecikme, ├žok tart─▒┼č─▒lmaktad─▒r. Baz─▒lar─▒, belirli bir i┼člevi yerine getirmek i├žin her zaman bir sinyal veya geri arama olmas─▒ gerekti─čini s├Âyler, di─čerleri ise bazen keyfi bir gecikme an─▒n─▒n faydal─▒ oldu─čunu iddia eder. Her birinin kendi ve bir kural─▒n─▒n bu sekt├Ârde hi├žbir ┼čeyi dikte edemeyece─čini s├Âyl├╝yorum.

Bir uyku fonksiyonu yazmak basittir ve JavaScript Promises ile daha da kullan─▒┼čl─▒ hale getirilmi┼čtir:

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

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

629







Yaln─▒zca hata ay─▒klama / dev i├žin , e─čer biri i├žin yararl─▒ysa, bunu g├Ânderirim

Firebug'da (ve muhtemelen di─čer js konsollar─▒nda) ilgin├ž ┼čeyler, girdikten sonra hi├žbir ┼čey olmuyor, sadece belirtilen uyku s├╝resinden sonra (...)

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

Kullan─▒m ├Ârne─či:

 function sleepThenAct(){ sleepFor(2000); console.log("hello js sleep !"); }
 

289







Di─čer afi┼člere kat─▒l─▒yorum, yo─čun bir uyku sadece k├Ât├╝ bir fikirdir.

Bununla birlikte, setTimeout y├╝r├╝tmeyi bekletmez, zaman a┼č─▒m─▒ s├╝resi dolduktan sonra de─čil, zamana┼č─▒m─▒ s├╝resi dolduktan sonra de─čil, SETO'nun hemen ard─▒ndan fonksiyonun bir sonraki sat─▒r─▒n─▒ ├žal─▒┼čt─▒r─▒r.

Bunu yapman─▒n yolu, fonksiyonunuzu par├žalara ├Ânceki ve sonraki b├Âl├╝mlere ay─▒rmakt─▒r.

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

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

─░┼člev adlar─▒n─▒z─▒n hala her bir par├žan─▒n ne yapt─▒─č─▒n─▒ do─čru bir ┼čekilde tan─▒mlad─▒─č─▒ndan emin olun (funcPart1 ve funcPart2 yerine IE GatherInputThenWait ve CheckInput)

D├╝zenle

Bu y├Ântem, zaman a┼č─▒m─▒n─▒zdan SONRA kadar karar verdi─činiz kod sat─▒rlar─▒n─▒ ├žal─▒┼čt─▒rmama amac─▒na ula┼č─▒rken, s─▒radaki herhangi bir i┼člemi y├╝r├╝tmek i├žin kontrol├╝ yine de istemci PC'ye geri d├Ând├╝r├╝r.

Daha Fazla D├╝zenleme

Yorumlarda belirtildi─či gibi bu kesinlikle bir d├Âng├╝de ├çALI┼×MAYACAKTIR. Bir d├Âng├╝de ├žal─▒┼čmas─▒n─▒ sa─člamak i├žin baz─▒ s├╝sl├╝ (├žirkin) hackler yapabilirsiniz, ancak genel olarak bu felaket bir spagetti kodu i├žin yeterli olacakt─▒r.


172







$ DEITY a┼čk─▒ i├žin, l├╝tfen bekle, yo─čun bir uyku i┼člevi almay─▒n. setTimeout ve setInterval ihtiyac─▒n─▒z olan her ┼čeyi yap─▒n.

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

Her iki saniyelik aral─▒k, bir saniye boyunca metni gizler. Bu, her saniye metni g├Âstermek ve gizlemek i├žin setInterval ve setTimeout ├Â─čelerinin nas─▒l kullan─▒laca─č─▒n─▒ g├Âsterir.


125







Bunun biraz eski bir soru oldu─čunu biliyorum, ancak (benim gibi) Rhino ile Javascript kullan─▒yorsan─▒z, kullanabilirsiniz ...

 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.
   */
}
 

113







E─čer jQuery kullan─▒yorsan─▒z, birisi asl─▒nda setTimeout i├žin bir sarmalay─▒c─▒dan ba┼čka bir ┼čey olmayan bir "gecikme" eklentisi yaratt─▒:

 // 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;
};
 

Ard─▒ndan, beklendi─či gibi yaln─▒zca bir i┼člev ├ža─čr─▒s─▒ sat─▒r─▒nda kullanabilirsiniz:

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

68







Ben de uyku ├ž├Âz├╝m├╝ arad─▒m (├╝retim kodu i├žin de─čil, sadece dev / testler i├žin) ve bu makaleyi buldum:

http://narayanraman.blogspot.com/2005/12/javascript-sleep-or-wait.html

... ve i┼čte m├╝┼čteri taraf─▒nda ├ž├Âz├╝mler i├žeren ba┼čka bir ba─člant─▒: http://www.devcheater.com/

Ayr─▒ca, arama alert() yaparken, uyar─▒n─▒z g├Âsterilirken kodunuz da duraklat─▒l─▒r - uyar─▒y─▒ g├Âstermemek, ayn─▒ etkiyi elde etmek i├žin bir yol bulman─▒z gerekir. :)


44







─░┼čte senkronize bir XMLHttpRequest kullanarak basit bir ├ž├Âz├╝m:

 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 i├žeri─či:

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

┼×imdi ┼čununla ara: sleep (5);


30







Hadi bakal─▒m. Kodun dedi─či gibi, k├Ât├╝ bir yaz─▒l─▒m olmay─▒n ve bunu web sitelerinde kullan─▒n. Bu bir geli┼čtirme yard─▒mc─▒ program─▒ i┼člevidir.

 // 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) {}
}
 

29







┼×ahsen basit gibi:

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

sonra:

 sleep(2); // Sleeps for 2 seconds
 

P5js'de komut dosyalar─▒ olu┼čtururken sahte y├╝kleme s├╝resi olu┼čturmak i├žin her zaman kullan─▒yorum


20







─░lk:

Bu ┼čekilde ├žal─▒┼čt─▒rmak istedi─činiz i┼člevi tan─▒mlay─▒n:

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

Ard─▒ndan setTimeout y├Ântemiyle y├╝r├╝tmesini zamanlay─▒n:

 setTimeout(alertWorld,1000)
 

─░ki ┼čeyi not et

  • ikinci arg├╝man milisaniye cinsinden zamand─▒r
  • ─░lk arg├╝man olarak, parantez olmadan i┼člevin sadece ad─▒n─▒ (ba┼čvuru) ge├žmelisiniz.

19







├ço─ču insan─▒n istedi─či gibi g├Âr├╝nmesini sa─člamak i├žin daha iyi bir ├ž├Âz├╝m anonim bir i┼člev kullanmakt─▒r:

 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
 

Bu muhtemelen ne istersen onu yapan bir ┼čeye en yak─▒n olan─▒d─▒r.

Not, birden fazla uykuya ihtiyac─▒n─▒z varsa, bu aceleyle ├žirkinle┼čebilir ve asl─▒nda tasar─▒m─▒n─▒z─▒ yeniden d├╝┼č├╝nmeniz gerekebilir.


16







Taray─▒c─▒lar i├žin, setTimeout ve setInterval ├Â─čelerinin gitmenin yolu oldu─čunu kabul ediyorum.

Ancak sunucu taraf─▒ kodu i├žin bir engelleme i┼člevi gerektirebilir (├Ârne─čin, i┼č par├žac─▒─č─▒ senkronizasyonunu etkili bir ┼čekilde yapabilmeniz i├žin).

Node.js ve meteor kullan─▒yorsan─▒z, bir fiberde setTimeout kullanman─▒n s─▒n─▒rlar─▒n─▒ a┼čm─▒┼č olabilirsiniz. Sunucu taraf─▒nda uyku i├žin kod burada.

 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');
 

Bak─▒n─▒z: https://github.com/laverdet/node-fibers#sleep


10







Ben di─čer asenkron g├Ârevlerle kod tutarl─▒l─▒k i├žin bir Promise i├žinde setTimeout kaps├╝lleyen: Demo i├žinde Fiddle

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

Bunun gibi kullan─▒l─▒r:

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

Promises kullan─▒yorsan─▒z, s├Âzdizimini hat─▒rlamak kolayd─▒r.


10







Buradaki cevaplar─▒n ├žo─ču yanl─▒┼č y├Ânlendirilmi┼č veya en az─▒ndan eskimi┼č durumda. Javascript tek bir i┼č par├žac─▒─č─▒ olmak zorunda de─čil ve asl─▒nda ├Âyle de─čil. Bug├╝n t├╝m ana taray─▒c─▒lar ├žal─▒┼čanlar─▒ desteklemektedir, bu durumdan ├Ânce Rhino ve Node.js gibi di─čer javascript ├žal─▒┼čma zamanlar─▒nda ├žoklu okuma destekliydi.

'Javascript tek di┼čli' ge├žerli bir cevap de─čil. ├ľrne─čin, bir i┼č├ži i├žinde bir uyku i┼člevini ├žal─▒┼čt─▒rmak, kullan─▒c─▒ aray├╝z├╝nde ├žal─▒┼čan kodlar─▒n hi├žbirini engellemeyecektir.

Jenerat├Ârleri ve verimi destekleyen daha yeni ├žal─▒┼čma s├╝relerinde, tek bir i┼č par├žac─▒kl─▒ ortamda uyku i┼člevine benzer bir i┼člevsellik getirilebilir:

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

// run code you want to sleep here (ommit star if using js 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(){
        // ommit .value if using js 1.7
        var nextSleep = generator.next().value;
        resume(nextSleep, generator);
    }, ms);
}

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

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

Bu uykunun taklidi, ipli─či bloke etmedi─činden ger├žek bir uyku i┼člevinden farkl─▒d─▒r. Javascript'in ┼ču anki setTimeout fonksiyonunda sadece ┼čekerdir. Bu i┼člev t├╝r├╝ Task.js'de uygulanm─▒┼čt─▒r ve bug├╝n Firefox'ta ├žal─▒┼čmal─▒d─▒r.


9







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

arama i┼člevinizin zaman uyumsuz oldu─čundan emin olun

do─čruland─▒ ve iyi ├žal─▒┼č─▒yor


9







Javascript uykusunda / beklemede birka├ž web sayfas─▒n─▒ ara┼čt─▒rd─▒m / googledim ... ve javascript'in "RUN, GEC─░KMES─░, RUN" ┼čeklinde olmas─▒n─▒ istiyorsan─▒z H─░├çB─░R cevap yok. sayfalar), RUN "veya" RUN, RUN + gecikmeli RUN "....

Bu y├╝zden biraz burger yedim ve d├╝┼č├╝nd├╝m ::: i┼čte i┼če yarayan bir ├ž├Âz├╝m ... ama ├žal─▒┼čan kodlar─▒n─▒z─▒ kesmek zorundas─▒n─▒z ... ::: evet, biliyorum, bu yeniden d├╝zenlemeyi okumak daha kolay .. hala

//......................................... //├Ârnek 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>
 

// .................................. //

 <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>
 

// ................. example3:

 <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>
 

// .............. example4:

 <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>
 

8







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

7







JavaScript'te b├Âyle bir uyku yapamazs─▒n─▒z, daha do─črusu yapmamal─▒s─▒n─▒z. Bir uyku veya bir s├╝re d├Âng├╝ y├╝r├╝tmek, kullan─▒c─▒n─▒n taray─▒c─▒s─▒n─▒n d├Âng├╝ tamamlan─▒ncaya kadar ask─▒da kalmas─▒na neden olur.

Ba┼čvurdu─čunuz ba─člant─▒da belirtildi─či gibi bir zamanlay─▒c─▒ kullan─▒n.


6







SetTimeout () i┼člevini kullanmak yerine sleep () i┼člevini kullanmak isteyebilece─činiz senaryolardan biri, sonu├žta yeni bir a├ž─▒l─▒r pencerenin a├ž─▒lmas─▒yla sonu├žlanacak bir kullan─▒c─▒ t─▒klamas─▒na yan─▒t veren bir i┼čleviniz varsa ve k─▒sa bir s├╝re gerektiren bir i┼člem ba┼člatt─▒ysan─▒zd─▒r. Pop-up g├Âsterilmeden ├Ânce tamamlamak i├žin A├ž─▒k pencerenin bir kapatmaya ta┼č─▒nmas─▒, genellikle taray─▒c─▒ taraf─▒ndan engellendi─či anlam─▒na gelir.


6







Senkron y├╝r├╝tme ile u─čra┼čmak zorunda kal─▒rsan─▒z uyku fonksiyonunun amac─▒n─▒ anlayabilirim. SetInterval ve setTimeout i┼člevleri, y├╝r├╝tme s─▒ras─▒n─▒ ana programa d├Ând├╝ren paralel bir y├╝r├╝tme i┼č par├žac─▒─č─▒ olu┼čturur; bu, belirli bir sonucu beklemeniz gerekirse etkin de─čildir. Elbette ki┼či olaylar─▒ ve i┼čleyicileri kullanabilir, ancak baz─▒ durumlarda ama├žlanan de─čildir.


6







─░ki bitimi ekliyorum. Test amac─▒yla yo─čun bir beklemeye ihtiyac─▒m vard─▒. Kodu ├žok fazla i┼č olacak gibi b├Âlmek istemedim, bu y├╝zden benim i├žin basitti.

 for (var i=0;i<1000000;i++){                    
     //waiting
  }
 

Bunu yaparken dezavantaj─▒ g├Âremiyorum ve benim i├žin hile yapt─▒.


6







Java'n─▒n uyku y├Ântemi kullan─▒larak yap─▒labilir. FF ve IEÔÇÖde test ettim ve bilgisayar─▒ kilitlemiyor, kaynaklar─▒ ├ži─čniyor veya sonsuz sunucu isabetlerine neden olmuyor. Bana temiz bir ├ž├Âz├╝m gibi geliyor.

├ľncelikle, Java'n─▒n sayfaya y├╝klenmesini ve y├Ântemlerini kullan─▒labilir hale getirmeniz gerekir. Bunu yapmak i├žin ┼čunu yapt─▒m:

 <html>
<head>

<script type="text/javascript">

  function load() {
    var appletRef = document.getElementById("app");
    window.java = appletRef.Packages.java;
  } // endfunction

</script>

<body onLoad="load()">

<embed id="app" code="java.applet.Applet" type="application/x-java-applet" MAYSCRIPT="true" width="0" height="0" />
 

O zaman, JS'nizde a─čr─▒s─▒z bir duraklama istedi─činizde yapman─▒z gereken tek ┼čey:

 java.lang.Thread.sleep(xxx)
 

Burada xxx milisaniye cinsinden s├╝redir. Benim durumumda (gerek├žeyle), bu ├žok k├╝├ž├╝k bir ┼čirkette arka u├ž sipari┼č yerine getirmenin bir par├žas─▒yd─▒ ve sunucudan y├╝klenmesi gereken bir fatura yazd─▒rmam gerekiyordu. Faturay─▒ (web sayfas─▒ olarak) bir iFrame'e y├╝kleyip iFrame'i yazd─▒rarak yapt─▒m. Tabii ki, yazd─▒rmadan ├Ânce sayfan─▒n tamamen y├╝klenmesini beklemem gerekiyordu, bu y├╝zden JS'nin duraklamas─▒ gerekiyordu. Bunu, fatura sayfas─▒n─▒n (iFrame'de) ana sayfadaki gizli form alan─▒n─▒ onLoad olay─▒yla de─či┼čtirmesini sa─člad─▒m. Ve faturay─▒ yazd─▒rmak i├žin ana sayfadaki kod ┼č├Âyle g├Âr├╝n├╝yordu (a├ž─▒kl─▒k i├žin kesilmeyen alakas─▒z par├žalar):

 var isReady = eval('document.batchForm.ready');
isReady.value=0;

frames['rpc_frame'].location.href=url;

while (isReady.value==0) {
  java.lang.Thread.sleep(250);
} // endwhile

window.frames['rpc_frame'].focus();
window.frames['rpc_frame'].print();
 

B├Âylece kullan─▒c─▒ d├╝─čmeye basar, komut dosyas─▒ fatura sayfas─▒n─▒ y├╝kler, sonra bekler, her ├žeyrek saniyede bir kontrol ederek fatura sayfas─▒n─▒n y├╝klenip y├╝klenmedi─čini kontrol eder ve ard─▒ndan kullan─▒c─▒n─▒n yaz─▒c─▒ya g├Ândermesi i├žin yazd─▒rma ileti┼čim kutusunu a├žar. QED.


6







Cevaplar─▒n ├žo─ču (do─črudan) soruyu cevaplamaz, ve bu da ...

─░┼čte benim iki kuru┼č (veya fonksiyonlar):

E─čer setTimeout ve i┼člevlerinden daha az clunky fonksiyonlar setInterval istiyorsan─▒z, onlar─▒ sadece arg├╝manlar─▒n s─▒ras─▒n─▒ tersine ├ževiren ve ho┼č isimler veren fonksiyonlara sarabilirsiniz:

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

CoffeeScript s├╝r├╝mleri:

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

Onlar─▒ daha sonra ads─▒z i┼člevlerle g├╝zelce kullanabilirsiniz:

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

┼×imdi "N milisaniyeden sonra, ..." (veya "her N milisaniyeden sonra ...") olarak kolayca okunuyor


6







Bir d├Âng├╝ taraf─▒ndan y├╝r├╝t├╝lmekte olan bir ├ža─čr─▒ k├╝mesini bo┼čaltmak isteyen ├Âzel bir durum i├žin, prototip ile a┼ča─č─▒daki kod gibi bir ┼čey kullanabilirsiniz. Prototip olmadan, delay i┼člevini setTimeout ile de─či┼čtirebilirsiniz.

 function itemHandler(item)
{
    alert(item);
}

var itemSet = ['a','b','c'];

// Each call to itemHandler will execute
// 1 second apart
for(var i=0; i<itemSet.length; i++)
{
    var secondsUntilExecution = i;
    itemHandler.delay(secondsUntilExecution, item)
}
 

5







E─čer d├╝─č├╝m d├╝─č├╝m├╝ndeyseniz, liflere bir g├Âz atabilirsiniz - d├╝─č├╝me ├Âzg├╝ bir C uzant─▒s─▒, ├žok-par├žac─▒kl─▒ bir sim├╝lasyon.

sleep Bir fiberde y├╝r├╝tmeyi engelleyen bir ┼čekilde ger├žek yapman─▒z─▒ sa─člar , ancak ana iplikte ve di─čer fiberlerde blokaj yapmaz .

─░┼čte kendi readme den yeni bir ├Ârnek:

 // sleep.js

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');
 

- ve sonu├žlar:

 $ node sleep.js
wait... Fri Jan 21 2011 22:42:04 GMT+0900 (JST)
back in main
ok... Fri Jan 21 2011 22:42:05 GMT+0900 (JST)
 

5







2009'dan itibaren eski bir soru. ┼×imdi 2015'te ECMAscript 2015 aka ES6'da tan─▒mlanan jenerat├Ârlerle yeni bir ├ž├Âz├╝m m├╝mk├╝n. Haziran ay─▒nda onayland─▒, ancak daha ├Ânce Firefox ve Chrome'da uyguland─▒. Art─▒k bir uyku i┼člevi, taray─▒c─▒ donmadan, me┼čgul olmayan, engelleyici olmayan ve d├Âng├╝ler ve alt i┼člevler i├žine yuvalanm─▒┼č hale getirilebilir. Yaln─▒zca saf JavaScript gereklidir, kitapl─▒klar veya ├žer├ževeler yoktur.

A┼ča─č─▒daki program nas─▒l sleep() ve nas─▒l runSleepyTask() yap─▒labilece─čini g├Âsterir . sleep() ─░┼člevi yaln─▒zca bir oldu─čunu yield beyan. O kadar basittir ki, yield ifadeyi do─črudan arama yapmak yerine do─črudan yazmak kolayd─▒r sleep() , ancak daha sonra uyku s├Âzc├╝─č├╝ olmazd─▒ :-) Verim, next() i├žindeki y├Ânteme bir zaman de─čeri d├Ând├╝r├╝r wakeup() ve bekler. As─▒l "uyku", wakeup() eskinin kullan─▒m─▒yla yap─▒l─▒r setTimeout() . Geri aramada , next() y├Ântem yield devam etmek i├žin ifadeyi tetikler ve verimin "b├╝y├╝s├╝", t├╝m yerel de─či┼čkenlerin ve etraf─▒ndaki t├╝m ├ža─čr─▒ y─▒─č─▒n─▒n─▒n hala bozulmam─▒┼č olmas─▒d─▒r.

Uyku () veya verim kullanan i┼člevler ├╝retici olarak tan─▒mlanmal─▒d─▒r. Anahtar kelimeye bir y─▒ld─▒z i┼čareti ekleyerek kolay yap─▒l─▒r function* . Bir jenerat├Âr├╝ ├žal─▒┼čt─▒rmak biraz zordur. Anahtar kelime ile ├ža─čr─▒ld─▒─č─▒nda new , jenerat├Âr next() y├Ântemi olan bir nesneyi d├Ând├╝r├╝r , ancak jenerat├Âr├╝n g├Âvdesi ├žal─▒┼čt─▒r─▒lmaz (anahtar kelime new iste─če ba─čl─▒d─▒r ve hi├žbir farketmez). next() Bir ile kar┼č─▒la┼čana kadar bir y├Ântem jenerat├Âr├╝ g├Âvdesinin ├žal─▒┼čt─▒r─▒lmas─▒n─▒ yield . Sar─▒c─▒ i┼člevi runSleepyTask() , pinponyu ba┼člat─▒r: next() a'y─▒ bekler yield ve yield a'y─▒ bekler next() .

Bir jenerat├Âr├╝ ├ža─č─▒rman─▒n bir ba┼čka yolu da anahtar kelimedir yield* , burada basit bir i┼člev ├ža─čr─▒s─▒ gibi ├žal─▒┼č─▒r, ancak geri d├Ân├╝┼č kabiliyeti de i├žerir next() .

Bunlar─▒n hepsi ├Ârnekle g├Âsterilmi┼čtir drawTree() . D├Ânen bir 3D sahneye yaprakl─▒ bir a─ča├ž ├žizer. Bir a─ča├ž farkl─▒ y├Ânlerde ├╝stte 3 k─▒s─▒m olan bir g├Âvde olarak ├žizilir. Her par├ža drawTree() k─▒sa bir uykudan sonra tekrar tekrar ├ža─č─▒r─▒larak ba┼čka bir fakat daha k├╝├ž├╝k a─ča├ž olarak ├žizilir . ├çok k├╝├ž├╝k bir a─ča├ž sadece bir yaprak olarak ├žizilir.

Her bir yapra─č─▒n ayr─▒ bir g├Ârevde kendi ya┼čam─▒ vard─▒r runSleepyTask() . Do─čar, b├╝y├╝r, oturur, kaybolur, d├╝┼čer ve ├Âl├╝r growLeaf() . H─▒z ile kontrol edilir sleep() . Bu, ├žoklu g├Ârev yapman─▒n ne kadar kolay yap─▒labilece─čini g├Âsterir.

 function* sleep(milliseconds) {yield milliseconds};

function runSleepyTask(task) {
    (function wakeup() {
        var result = task.next();
        if (!result.done) setTimeout(wakeup, result.value);
    })()
}
//////////////// written by Ole Middelboe  /////////////////////////////

pen3D =setup3D();
var taskObject = new drawTree(pen3D.center, 5);
runSleepyTask(taskObject);

function* drawTree(root3D, size) {
    if (size < 2) runSleepyTask(new growLeaf(root3D))
    else {
        pen3D.drawTrunk(root3D, size);
        for (var p of [1, 3, 5]) {
            var part3D = new pen3D.Thing;
            root3D.add(part3D);
            part3D.move(size).turn(p).tilt(1-p/20);
            yield* sleep(50);
            yield* drawTree(part3D, (0.7+p/40)*size);
        }
    }
}

function* growLeaf(stem3D) {
    var leaf3D = pen3D.drawLeaf(stem3D);
    for (var s=0;s++<15;) {yield* sleep(100); leaf3D.scale.multiplyScalar(1.1)}
    yield* sleep( 1000 + 9000*Math.random() );
    for (var c=0;c++<30;) {yield* sleep(200); leaf3D.skin.color.setRGB(c/30, 1-c/40, 0)}
    for (var m=0;m++<90;) {yield* sleep( 50); leaf3D.turn(0.4).tilt(0.3).move(2)}
    leaf3D.visible = false;
}
///////////////////////////////////////////////////////////////////////

function setup3D() {
    var scene, camera, renderer, diretionalLight, pen3D;

    scene = new THREE.Scene();
    camera = new THREE.PerspectiveCamera(75, 
        window.innerWidth / window.innerHeight, 0.1, 1000);
    camera.position.set(0, 15, 20);
    renderer = new THREE.WebGLRenderer({ alpha: true, antialias: true });
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);
    
    directionalLight = new THREE.DirectionalLight(0xffffaa, 0.7);
    directionalLight.position.set(-1, 2, 1);
    scene.add(directionalLight);
    scene.add(new THREE.AmbientLight(0x9999ff));
      
    (function render() {
        requestAnimationFrame(render);
        // renderer.setSize( window.innerWidth, window.innerHeight );
        scene.rotateY(10/60/60);
        renderer.render(scene, camera);
    })();
    
    window.addEventListener(
        'resize',
        function(){
            renderer.setSize( window.innerWidth, window.innerHeight );
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
       }, 
       false
    );
    
    pen3D = {
        drawTrunk: function(root, size) {
            // root.skin = skin(0.5, 0.3, 0.2);
            root.add(new THREE.Mesh(new THREE.CylinderGeometry(size/12, size/10, size, 16), 
                root.skin).translateY(size/2));
            root.add(new THREE.Mesh(new THREE.SphereGeometry(size/12, 16), 
                root.skin).translateY(size));
            return root;
        },
        
        drawLeaf: function(stem) {
            stem.skin.color.setRGB(0, 1, 0);
            stem.add(new THREE.Mesh(new THREE.CylinderGeometry(0, 0.02, 0.6), 
                stem.skin) .rotateX(0.3).translateY(0.3));
            stem.add(new THREE.Mesh(new THREE.CircleGeometry(0.2), 
                stem.skin) .rotateX(0.3).translateY(0.4));
            return stem;
        },
        
        Thing: function() {
            THREE.Object3D.call(this);
            this.skin = new THREE.MeshLambertMaterial({
                color: new THREE.Color(0.5, 0.3, 0.2),
                vertexColors: THREE.FaceColors,
                side: THREE.DoubleSide
            })
        }
    };

    pen3D.Thing.prototype = Object.create(THREE.Object3D.prototype);
    pen3D.Thing.prototype.tilt = pen3D.Thing.prototype.rotateX;
    pen3D.Thing.prototype.turn = pen3D.Thing.prototype.rotateY;
    pen3D.Thing.prototype.move = pen3D.Thing.prototype.translateY;
    
    pen3D.center = new pen3D.Thing;
    scene.add(pen3D.center);
    
    return pen3D;
} 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r71/three.min.js"></script> 

3B malzeme setup3D () i├žinde gizlidir ve yaln─▒zca console.log () i┼člevinden daha az s─▒k─▒c─▒ olmas─▒ i├žin dahil edilmi┼čtir. Melekler bu arada radyan cinsinden ├Âl├ž├╝l├╝r.

Firefox ve Chrome'da ├žal─▒┼čmas─▒ test edildi. Internet Explorer ve iOS'ta (iPad'ler) uygulanmad─▒. Kendiniz ├žal─▒┼čt─▒rmay─▒ deneyin.

Buldu─čum cevaplardan bir kez daha ge├žtikten sonra, Gabriel RatenerÔÇÖin bir y─▒l ├Ânce benzer bir cevap verdi─čini: https://stackoverflow.com/a/24401317/5032384


5







D├╝─č├╝m 7.6'dan beri , promisify i┼člevi utils mod├╝l├╝nden ile birle┼čtirebilirsiniz setTimeout .

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

Genel kullan─▒m

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

main()
 

Soru Kullan─▒m─▒

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

5



─░lgili yay─▒nlar


PHP'de var_dump veya print_r'un JavaScript e┼čde─čeri nedir? [├žift]

Cron'un Windows versiyonu nedir? [kapal─▒]

VB.netÔÇÖin InputDialogÔÇÖunun C# s├╝r├╝m├╝ nedir?

Bir script etiketinin type ├Âzelli─či i├žin javascript MIME t├╝r├╝ nedir? [├žift]

HTML canvas JavaScript k├╝t├╝phaneleri ve ├žer├ževelerinde mevcut sanat durumu nedir? [kapal─▒]

C ve C++ 'da kullan─▒lan exec farkl─▒ s├╝r├╝mleri nelerdir?

Bir Hashtable'─▒n genel versiyonu nedir?

Java'n─▒n ArrayList'in C++ s├╝r├╝m├╝ nedir

Uyku d├╝zeninin zaman karma┼č─▒kl─▒─č─▒ nedir?

Neden bu program─▒n F# s├╝r├╝m├╝ Haskell'den 6 kat daha h─▒zl─▒?

Etiketle ilgili di─čer sorular [javascript]


Komut dosyam─▒n hangi Python s├╝r├╝m├╝n├╝ ├žal─▒┼čt─▒rd─▒─č─▒n─▒ nas─▒l kontrol edebilirim?

Bir toplu i┼č dosyas─▒nda be┼č saniye boyunca nas─▒l uyuyabilirim / cmd [├žo─čalt]

Java'da Bir Dosyan─▒n MD5 Sa─člama Toplam─▒n─▒ Alma

'Kapatma' nedir?

Bir dizgenin son 4 karakterini al [duplicate]

Babel ve webpack kullan─▒rken ek┼či haritalar─▒n─▒ nas─▒l olu┼čtururum?

iOS'ta bir pop-up ileti┼čim kutusu nas─▒l uygulan─▒r

WPF'de kontrolleri bo┼č alanlar─▒ doldurmak nas─▒l sa─člayabilir

Bir ├žiftin NaN'ye e┼čit olup olmad─▒─č─▒n─▒ nas─▒l test edersiniz?

JavaScript ile bir radyo d├╝─čmesinin se├žilip se├žilmedi─čini nas─▒l kontrol edebilirim?