Node.js'de (Javascript) Nasıl Bekleyebilirim, bir süre duraklamam gerekiyor


385

Kişisel ihtiyaçlar için komut dosyası gibi bir konsol geliştiriyorum. Uzun bir süre duraklayabilmem gerekiyor, ancak araştırmamdan node.js'nin gerektiği gibi durması mümkün değil. Bir süre sonra kullanıcıların bilgilerini okumak zorlaşıyor ... Orada bazı kodlar gördüm, ancak bunların çalışması için bunların içinde başka bir kod olması gerektiğine inanıyorum:

setTimeout(function() {
}, 3000);

Ancak, zaman sonra yürütmek için bu kod satırı sonra her şeyi gerekir.

Örneğin,

//start-of-code
console.log('Welcome to My Console,');
some-wait-code-here-for-ten-seconds..........
console.log('Blah blah blah blah extra-blah');
//endcode. 

Ayrıca şöyle şeyler gördüm

yield sleep(2000);

Ancak node.js bunu tanımıyor.

Bu uzatılmış duraklamayı nasıl başarabilirim?


3
bu insanlardan birini doğru cevap olarak işaretlemenin nasıl olduğunu :)
Billybonks

1
@Christopher Allen, Belki ilgili değil, ama iş yapıyor: require("child_process").execSync('php -r "sleep($argv[1]);" ' + seconds);
Haitham Sweilem

Düğüm-uyku hile yapabilir npm modülü (ancak, sadece hata ayıklama için kullanmak istiyorsunuz)
Julian Soro

Yanıtlar:


211

Bunu yapmanın en iyi yolu, kodunuzu aşağıdaki gibi birden fazla işleve bölmektir:

function function1() {
    // stuff you want to happen right away
    console.log('Welcome to My Console,');
}

function function2() {
    // all the stuff you want to happen after that pause
    console.log('Blah blah blah blah extra-blah');
}

// call the first chunk of code right away
function1();

// call the rest of the code and have it execute after 3 seconds
setTimeout(function2, 3000);

Bu JohnnyHK'nın çözümüne benzer , ancak çok daha temiz ve genişletilmesi daha kolay.


7
@LucasSeveryn O zaman yanlış bir şey yapıyorsun. Bu temel bir tasarım modelidir.
Elliot Bonneville

Ve işlevin başlangıcı yalnızca bir işlev değil, senkronize edilmesi gereken koddan 10 dosya uzakta olduğunda ne yaparsınız?
Cyril Duchon-Doris

10
@ CyrilDuchon-Doris Ne?
AturSams

3
@ machineghost'un cevabını, özel kod gerektirmeyen ve bekliyor / async'i destekleyen zarif bir söz tabanlı çözüm için kullanın
Dane Macaulay

Bu zaman uyumsuzdur, yani işlev1 3 saniyeden önce sonlanırsa, birbirleriyle çakışmaya başlarlar. O zaman geri dönemezsiniz ve neredeyse hiç kullanışlı değildir. Şimdiye kadar bulduğum tek yol kullanmaktıdebugger;
Cristian Traìna

427

Eski bir soruya yeni bir cevap. Bugün ( Ocak 2017 Haziran 2019) çok daha kolay. Yeni async/awaitsözdizimini kullanabilirsiniz . Örneğin:

async function init() {
  console.log(1);
  await sleep(1000);
  console.log(2);
}

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

Kullanmak için async/awaityükleme ve eklentileri olmadan kutunun dışında, kullandığınız, düğüm-v7 veya düğüm-v8'i kullanmak zorunda --harmonybayrağı.

Haziran 2019'u Güncelle: NodeJS'nin en son sürümlerini kullanarak kutunun dışında kullanabilirsiniz. Komut satırı bağımsız değişkenleri sağlamanıza gerek yoktur. Google Chrome bile bugün bunu destekliyor.

Mayıs 2020 Güncellemesi: Yakında awaitsözdizimini bir zaman uyumsuz işlevin dışında kullanabileceksiniz . Bu örnekteki gibi üst düzeyde

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

Teklif 3. aşamada . Bugün webpack 5 (alfa) kullanarak kullanabilirsiniz,

Daha fazla bilgi:


5
Sanırım awaitönünde anahtar kelimeyi unuttunsleep(1000)
Ryan Jarvis

6
Bu gerçekten cevap olmalı, uyku node.js paketi zahmetli olabilir.
Stuart Allen

4
Gerçekten en iyi çözüm
Kostas Siabanis

40
let sleep = ms => new Promise(resolve => setTimeout(resolve, ms));Kendim gibi oneliner freaks için :)
Predrag Stojadinović

21
let sleep = require('util').promisify(setTimeout);7.6+ Düğümü üzerinde çalışır ve okunabilirliği artırır
BrianHVB

216

Herhangi bir bağımlılığı olmayan en kısa çözüm:

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

14
"Gelişmişliğin yüksekliği basitliktir." - Clare Booth Luce. Bu açık ara en iyi cevap, IMO.
arnold

3
Bu, diğer cevaplardan çok daha yeni, ancak 2018'den itibaren işi kod üzerinde başka bir etkisi olmadan 1 satırda yapan en zarif.
Herick

1
Bu iyi bir tane. Gerçi NodeJS 7.6.0 veya üstü kullanıyor olmalısınız. Eski sürümlerde çalışmaz.
Ryan Shillington

5
let sleep = require('util').promisify(setTimeout);üç karakter daha uzun ama tekrar kullanılabilir ve daha okunabilir imo
BrianHVB

2
Eslint şikayetinden kaçınmak için bunun resolveyerine onu arayın done. Yaniawait new Promise(resolve => setTimeout(resolve, 5000))
Darren Cook

150

Gecikmeden sonra yürütülmesini istediğiniz kodu geri aramaya koyun setTimeout:

console.log('Welcome to My Console,');
setTimeout(function() {
    console.log('Blah blah blah blah extra-blah');
}, 3000);

2
Bu, özellikle OP, programın geri kalanının bu gecikmeden sonra çalışmasını istiyorsa, çok dağınık ve genellikle kötü bir uygulamadır. Cevabımı gör.
Elliot Bonneville

32
@ElliotBonneville Bu konsepti göstermek için sadece bir örnek. Açıkçası, kodu başka bir yerde olduğu gibi satır içi kod kullanmak yerine bir işlev çağrısına dahil edebilmelisiniz (etmelisiniz).
JohnnyHK

@ChristopherKemp: Anlaşılan Node.js'nin bunun için bir çözümü var node-fibers. Bunu kontrol et.
Elliot Bonneville

Bu harika bir çözümdür, özellikle herhangi bir kod yürütmek istemiyorsanız, sadece bir döngü içinde "uyku" yöntemini taklit etmek istersiniz. Bu örnekte yanlış bir şey yok.
Halfstop

Bu, istemciden gelen istekleri geciktirmek için mükemmel, bu yaklaşımı istemci tarafında yükleme
iplikçiklerimi

145

Bu basit bir engelleme tekniğidir:

var waitTill = new Date(new Date().getTime() + seconds * 1000);
while(waitTill > new Date()){}

Bu oluyor engelleme başka bir şey (geri aramaları gibi) komut olacak şekilde sürece. Ama bu bir konsol betiği olduğundan, belki de ihtiyacınız olan şey budur!


27
korkunç ya da değil, basit bir yapar wait, engeller ve bazı test amaçlı çalışır. Tam aradığım şey.
Clijsters

8
3. parti kütüphaneleri olmadan soruyu mükemmel cevaplar ve basittir. Ancak insanlar "korkunç" .... Bu Btw vb bu çok benzer ağır işlemci yükü simüle için büyük örn olduğunu söylemek phpied.com/sleep-in-javascript
Don Cheadle

2
Ayrıca, olay döngüsünü yavaşlatacak ve böylece diğer kullanıcıları / bağlantıları da yavaşlatacak bir şeyi simüle etmeye çalışıyorsanız bu gerekli yaklaşımdır. Gecikmeli geri aramalar eklemek diğer kullanıcıları / bağlantıları etkilemez.
Don Cheadle

13
Bu bir spin-wait.
Mike Atlas

7
@Ali bu hedef gibi görünüyor.
Félix Gagnon-Grenier

63

Düğüm 7.6.0 veya üzeri

Düğüm yerel olarak beklemeyi destekler:

const sleep = (waitTimeInMs) => new Promise(resolve => setTimeout(resolve, waitTimeInMs));

zaman uyumsuz işlevleri kullanabiliyorsanız:

await sleep(10000); // sleep for 10 seconds

veya:

sleep(10000).then(() => {
  // This will execute 10 seconds from now
});

Eski Düğüm sürümlerinde (orijinal yanıt)

Windows ve Linux'ta çalışan, zaman zaman CPU'mun üzerinden geçmeden eşzamansız bir uyku istedim. Uyku paketini denedim ama Windows kutuma yüklenmedi. Ben kullanarak sona erdi:

https://www.npmjs.com/package/system-sleep

Yüklemek için şunu yazın:

npm install system-sleep

Kodunuzda,

var sleep = require('system-sleep');
sleep(10*1000); // sleep for 10 seconds

Tıkır tıkır çalışıyor.


1
büyük cevap teşekkürler - bazı imkansız kod mümkün kıldı - bu bir spin-bekleme DEĞİL
danday74

1
Daha ileri araştırmalarda bu modül başka bir deasync github deposundan çatallanan deasync'e dayanır. Orijinal repo bir hack olduğu için kullanmama konusunda uyarır. Çalışır, ancak tüm platformlarda çalışmaz, bu nedenle çapraz platform çözümüne ihtiyacınız varsa bundan kaçının.
danday74

1
Evet, onunla hiç deneyimlemedim ve dev için harika - kaputun altında yaygın olarak bulunan C veya C ++ 'a güveniyor, ancak bazı makinelerde onun başarısız olduğunu ve thats başarısız olduğunda sanırım bu yüzden sorunlara neden oluyor - sistem başarısız olursa uyku kodu yürütme donma bir spin bekleyin düşüyor
danday74

1
Bu paket Mac OS'de çalışmaz ve bu nedenle çapraz uyumlu değildir ve bu nedenle kullanılamaz. Bkz. Github.com/jochemstoel/nodejs-system-sleep/issues/4
nuzzolilo

1
@Nuzzolilo Bu çok garip. Mac OS'de bir geliştiricimiz var ve asla yanlış bir şeyden bahsetmedi. Belirli bir Mac OS sürümü olduğundan şüpheleniyorum. Bu cevabı da güncelledim çünkü uyku temel olarak NodeJS'nin daha yeni sürümlerine yerleştirildi.
Ryan Shillington

62

Modern Javascript kullanarak basit ve zarif uyku fonksiyonu

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

Bağımlılık yok, geri arama yok; bu kadar :-)


Soruda verilen örnek göz önüne alındığında, iki konsol günlüğü arasında şu şekilde uyuyacağız:

async function main() {
    console.log("Foo");
    await sleep(2000);
    console.log("Bar");
}

main();

"Dezavantajı" şimdi ana işlevi de olması gerektiği async. Ancak, zaten modern Javascript kodu yazdığınız düşünüldüğünde, muhtemelen (veya en azından olmalı!) Kodunuzu async/ awaitüzerinde kullanıyorsunuz , bu gerçekten bir sorun değil. Bugün tüm modern tarayıcılar bunu destekliyor .

sleepKullanılmayanlar async/awaitve şişman ok operatörleri için işleve biraz bilgi vererek , bu yazmanın ayrıntılı yolu:

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

Bununla birlikte, yağ ok operatörünün kullanılması onu daha da küçük (ve daha zarif) hale getirir.


1
Ayrıca uyku işlevini yazmadan asyncve diğer her şeyi aynı bırakmadan yazabilirsiniz . Muhtemelen asyncolsa daha açıktır .
Kevin Peña

İyi yakaladın, @ KevinPeña. Aslına bakarsanız, bence onu olmadan tercih ederim async. Cevabınızı önerinizle düzenledi. Ben kodu daha net yapar sanmıyorum; bunun için JSDoc yerine başvurmak istiyorum.
Lucio Paiva

8
Senaryolarımda aşağıdaki tek const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
satır olmasını isterim


34

Bu soru oldukça eski, ancak son zamanlarda V8 OP'nin taleplerini yerine getirebilecek Jeneratörler ekledi. Jeneratörler genellikle askıya alma veya gen-run gibi bir kütüphanenin yardımıyla asenkron etkileşimler için kullanımı en kolaydır .

Askıya alma kullanan bir örnek:

suspend(function* () {
    console.log('Welcome to My Console,');
    yield setTimeout(suspend.resume(), 10000); // 10 seconds pass..
    console.log('Blah blah blah blah extra-blah');
})();

İlgili okuma (utanmaz öz-tanıtım yoluyla): Jeneratörlerle Önemli Olan Nedir? .


2
İyi cevap - Ama okumalıyımyield setTimeout(suspend.resume(), 10000);
edhubbell

1
Teşekkürler, @edhubbell. Bu yanıt, askıya almanın çok eski bir sürümüne dayanıyordu, ancak en sonuncusu konusunda haklısınız. Cevabı güncelleyeceğim.
23.07.2015

bu düğümün hangi sürümü için?
danday74

1
@ danday74 İşaretlenmemiş olduklarında tam olarak hatırlayamıyorum, ancak --harmonybayrağın arkasında v0.12'den beri varlar ve node.green'e göre, v4.8.4'ten beri en azından bayraksız olarak mevcutlar: node.green/#ES2015-fonksiyonlar- jeneratörler- temel- fonksiyonellik . Bununla birlikte, async/awaitdaha yeni sözdiziminin şu anda daha iyi bir çözüm sağladığını ve bunun gibi ekstra kütüphanelere ihtiyaç duymadığını lütfen unutmayın suspend. Bir örnek için bu cevaba bakınız: stackoverflow.com/a/41957152/376789 . V7.10'dan beri zaman uyumsuz işlevler (bayraklar olmadan) kullanılabilir.
jmar777

20

Linux / nodejs'de bu benim için çalışıyor:

const spawnSync = zorunludur ('child_process'). spawnSync;

var sleep = spawnSync ('uyku', [1.5]);

Engelleniyor, ancak meşgul bir bekleme döngüsü değil.

Belirttiğiniz süre saniye cinsindendir ancak kesir olabilir. Diğer işletim sistemlerinin benzer bir komutu olup olmadığını bilmiyorum.


sleepUNIX günlerinden beri en.wikipedia.org/wiki/Sleep_%28Unix%29'dan beri hemen hemen her yerde mevcut ve kullanışlı bir çevredir . Sadece "nadir değil" os belki var olmayacaktı windows (ancak orada deneyebilirsinizchild_process.spawnSync('timeout', ['/T', '10'])
humanityANDpeace

17

Eğer "kod golf" yapmak istiyorsanız, burada diğer bazı cevapların daha kısa bir versiyonunu yapabilirsiniz:

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

Ama bence gerçekten ideal cevap, Node'nin utilkütüphanesini ve promisifytam olarak bu tür şeyler için tasarlanan işlevini kullanmaktır (daha önce vaat edilen vaatlere dayalı olmayan şeylerin söz tabanlı versiyonlarını yapmak):

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

Her iki durumda da await, sleepişlevinizi çağırmak için düğmesini kullanarak duraklatabilirsiniz :

await sleep(1000); // sleep for 1s/1000ms

Aslında, util.promisify kullanarak, geri arama sağlamadan uyku çağırmak mümkün değildir. nodejs.org/api/…
Howie

1
Eksik await. Bir çeşit geri arama oluşturur, bir şeyleri duraklatır ve sonra geri arama döndüğünde kodu yeniden başlatır. Geri arama bir değerle döner, ancak bu durumda umursamıyoruz, bu yüzden solda hiçbir şey yok await.
machineghost

1
golf kodunu şarap için bir satıra yazın;) const uyku = gerektirir ('util'). promisify (setTimeout);
Fabian

14

Son zamanlarda senkronizasyon modunda (düğüm liflerine dayalı) zaman uyumsuz işlevleri çağırmak için wait.for adı verilen daha basit bir soyutlama oluşturdum . Ayrıca yaklaşan ES6 Jeneratörlerine dayalı bir versiyon da var.

https://github.com/luciotato/waitfor

kullanma Wait.for , düğümün olay döngüsünü engellemeden herhangi bir standart nodejs async işlevini sanki bir eşitleme işleviymiş gibi çağırabilirsiniz.

İhtiyacınız olduğunda sırayla kod yazabilirsiniz, yani, komut dosyalarınızı kişisel kullanım için basitleştirmek için mükemmel (tahmin ediyorum).

wait.for kodunu kullanarak :

require('waitfor')

..in a fiber..
//start-of-code
console.log('Welcome to My Console,');
wait.miliseconds(10*1000); //defined in waitfor/paralell-tests.js - DOES NOT BLOCK
console.log('Blah blah blah blah extra-blah');
//endcode. 

Ayrıca Eşitleme modunda herhangi bir eşzamansız işlevi çağrılabilir . Örnekleri kontrol edin.


TypeError: Object #<Object> has no method 'miliseconds'
Kafein

yorum şöyle diyor: "// waitfor / paralell-tests.js'de tanımlanmış" dosyayı bu dosyadan alır.
Lucio M. Tato

2
Ben onu aldıktan sonra wait.for/paralell-tests.jstanımsız özellikleri vb ile ilgili başka bir hata ile karşılaştı. Bu yüzden onları da kopyalamak gerekiyordu. Kodu neden gerekli olmayacak şekilde düzenlemiyorsunuz?
user907860

Ve diğer fiber çözümleri bana tamamen yeni bir dünya açtı! Mümkünse milyonlarca oy verirdim. Nodejs topluluğunun çoğu liflere karşı olsa da, fantastik bir ek olduklarını ve geri arama cehennemi söz konusu olduğunda kesinlikle yerlerini aldıklarını düşünüyorum.
Levi Roberts

7

Javascript motoru (v8), olay kuyruğundaki olayların sırasına göre kod çalıştırdığından, javascript'in belirtilen süreden sonra yürütmeyi tam olarak tetiklediği kesin değildir. Yani, kodu daha sonra yürütmek için birkaç saniye ayarladığınızda, tetikleme kodu yalnızca olay kuyruğundaki sıralamaya dayandırılır. Bu nedenle, kodun yürütülmesinin tetiklenmesi belirtilen süreden daha uzun sürebilir.

Böylece Node.js takip ediyor,

process.nextTick()

kodu daha sonra çalıştırmak için setTimeout () kullanın. Örneğin,

process.nextTick(function(){
    console.log("This will be printed later");
});

2

ES6 destekleyicileri ile Promisebunları üçüncü taraf yardımı olmadan kullanabiliriz.

const sleep = (seconds) => {
    return new Promise((resolve, reject) => {
        setTimeout(resolve, (seconds * 1000));
    });
};

// We are not using `reject` anywhere, but it is good to
// stick to standard signature.

Sonra şu şekilde kullanın:

const waitThenDo(howLong, doWhat) => {
    return sleep(howLong).then(doWhat);
};

doWhatİşlevin içindeki resolvegeri arama haline geldiğini unutmayın new Promise(...).

Ayrıca bunun ASYNCHRONOUS uyku olduğunu unutmayın. Olay döngüsünü engellemez. Engelleme uykusuna ihtiyacınız varsa, C ++ bağlamaları yardımıyla engelleme uykusunu gerçekleştiren bu kütüphaneyi kullanın. (Düğümde eşzamansız ortamlar gibi tıkanık bir uykuya ihtiyaç duyulması nadirdir.)

https://github.com/erikdubbelboer/node-sleep


1
let co = require('co');
const sleep = ms => new Promise(res => setTimeout(res, ms));

co(function*() {
    console.log('Welcome to My Console,');
    yield sleep(3000);
    console.log('Blah blah blah blah extra-blah');
});

Yukarıdaki bu kod Javascript'in eşzamansız geri çağrı cehennem sorununun çözülmesinin yan etkisidir. Bu da Javascript'i arka uçta yararlı bir dil haline getirdiğini düşünüyorum. Aslında bu, modern Javascript'e sunulan en heyecan verici gelişme. Nasıl çalıştığını tam olarak anlamak için, jeneratörün nasıl çalıştığı tam olarak anlaşılmalıdır. functionA'nın ardından gelen anahtar kelimeye *modern Javascript'te bir üreteç işlevi denir. Npm paketi cobir jeneratörü çalıştırmak için bir koşucu işlevi sağlamıştır.

Temelde jeneratör fonksiyonu, bir fonksiyonun bir jeneratör fonksiyonunda yieldanahtar kelimeyle yürütülmesini duraklatmanın bir yolunu sağladı yieldve jeneratör ile arayan arasında bilgi alışverişini mümkün kıldı. Bu, arayan kişinin promisebir asenkron çağrısından veri ayıklaması ve çözülen verileri jeneratöre geri aktarması için bir mekanizma sağladı . Etkili bir şekilde, eşzamansız bir çağrıyı senkronize eder.


Bu kod soruyu cevaplayabilirken, sorunun nasıl ve / veya neden çözüldüğüne dair ek bağlam sağlamak yanıtlayıcının uzun vadeli değerini artıracaktır.
Donald Duck

Teşekkürler @DonaldDuck. Cevabımdaki kod muhtemelen Javascript'teki iyileştirmenin en heyecan verici kısmı. Bazı süper zeki insanların geri arama cehennemi problemini çözmek için bu yolu düşündüklerine şaşırdım.
Qian Chen


0

Sadece test amacıyla askıya almanız gerekiyorsa, geçerli iş parçacığı yürütmeyi deneyin:

function longExecFunc(callback, count) {

    for (var j = 0; j < count; j++) {
        for (var i = 1; i < (1 << 30); i++) {
            var q = Math.sqrt(1 << 30);
        }
    }
    callback();
}
longExecFunc(() => { console.log('done!')}, 5); //5, 6 ... whatever. Higher -- longer

0

basit bir olay gerçekleşmesi için 5 saniye bekleyeceğiz (kodda başka bir yerde true değerine ayarlanmış yapılan değişken ile gösterilir) veya zaman aşımı süresi sona erdiğinde her 100 ms'de bir kontrol edeceğiz

    var timeout=5000; //will wait for 5 seconds or untildone
    var scope = this; //bind this to scope variable
    (function() {
        if (timeout<=0 || scope.done) //timeout expired or done
        {
            scope.callback();//some function to call after we are done
        }
        else
        {
            setTimeout(arguments.callee,100) //call itself again until done
            timeout -= 100;
        }
    })();

0

Bazı insanlar için, kabul edilen cevap çalışmıyor, başka bir cevap buldum ve benim için çalışıyor: Bir parametreyi setTimeout () geri aramasına nasıl iletebilirim?

var hello = "Hello World";
setTimeout(alert, 1000, hello); 

'merhaba' geçirilen parametredir, zaman aşımı süresinden sonra tüm parametreleri iletebilirsiniz. Cevap için @Fabio Phms'a teşekkürler.


0

Tüm bu seti yapmak yerine Zaman aşımı, uyku ve diğer birçok şeyi kullanmak daha iyidir

const delay = require('delay');
await delay(2000); // will wait for 2 seconds before executing next line of code

'Gecikmenin' ne olduğunu açıklayabilir ve belgelerine bağlantı verebilir misiniz? Neden daha iyi?
boycy

-2

Diğer cevaplar harika ama farklı bir dokunuş alacağımı düşündüm.

Gerçekten aradığınız tek şey Linux'ta belirli bir dosyayı yavaşlatmaksa:

 rm slowfile; mkfifo slowfile; perl -e 'select STDOUT; $| = 1; while(<>) {print $_; sleep(1) if (($ii++ % 5) == 0); }' myfile > slowfile  &

düğüm benimprog yavaş dosya

Bu, her beş satırda 1 saniye uyuyacaktır. Düğüm programı yazar kadar yavaş ilerleyecektir. Başka şeyler yapıyorsa normal hızda devam ederler.

Mkfifo bir ilk giren ilk çıkar boru oluşturur. Bu işe yarar. Perl satırı istediğiniz kadar hızlı yazacaktır. $ | = 1 çıktıyı arabelleğe almadığını söylüyor.


-3

Bu sorunun cevabını okuduktan sonra, gerekirse geri arama yapabilen basit bir işlevi bir araya getirdim:

function waitFor(ms, cb) {
  var waitTill = new Date(new Date().getTime() + ms);
  while(waitTill > new Date()){};
  if (cb) {
    cb()
  } else {
   return true
  }
}

-4

Hakkında daha fazla bilgi için

yield sleep(2000); 

Redux-Saga'yı kontrol etmelisin . Ancak, model çerçeveniz olarak Redux seçiminize özgüdür (kesinlikle gerekli olmamasına rağmen).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.