Questa risposta può essere un po 'fastidiosa ma nuda con esso :-).
Poiché javascript è in genere eseguito all'interno di un browser, che è multithreading di cui javascript può occupare più thread, non esiste il concetto di "sleep globale" come in un programma con thread singolo.
Se si desidera sospendere un'operazione in un modo ragionevole, è possibile prendere in considerazione quanto segue.
Diciamo che si desidera il seguente
function foo(s) {
var j = 1; var k = 1;
sleep(s); // This would be nice right?
window.alert("Sum is : " + (j+k));
}
diventa realtà:
function foo(s) {
var j = 1 ; var k = 1;
setTimeout(s, function() {
window.alert("Sum is : " + (j+k));
});
}
Naturalmente il problema è che in un certo senso procedurale si consiglia di avere qualcosa di simile
function foo() {
do stuff;
pause();
do more stuff;
return;
}
function bar() {
foo(10);
window.alert("I want this to happen only after foo()");
}
Il problema è che non è possibile farlo utilizzando setTimeout, come mostrato sopra
Tuttavia è possibile fare qualcosa di simile:
function foo(s, afterwards, afterparms) {
var j = 1 ; var k = 1;
setTimeout(s, function() {
window.alert("Sum is : " + (j+k));
afterparms.parm1 = afterparms.parm1.toUpperCase();
afterwards(afterparms);
});
}
function bar() {
foo(10, function() {
window.alert("This will happen after window.alert");
}, { parm1: 'hello', parm2: 'world' });
}
prega di notare che di cui sopra è solo un modo per andare a passare informazioni alle funzioni, si possono fare delle cose davvero interessanti se si guarda fino convenzioni funzione di chiamata, argomenti variabili e tali
Questo è fastidioso da programmare se si pensa proceduralmente. Tuttavia, ci sono due cose da ricordare per quanto riguarda javascript. NON è un linguaggio procedurale, NOR è un linguaggio orientato agli oggetti. Javascript è un linguaggio funzionale con un sofisticato modello di gestione degli eventi. Quindi devi pensare in questi termini.
Ha senso anche, dal momento che la tipica macchina javascript è un gui (browser Web) che dal design non si vuole bloccare completamente durante il tentativo di elaborare qualcosa. Immagina che il tuo browser si blocchi completamente mentre una pagina sta facendo qualcosa, vorresti strangolare il programmatore che ti fa questo.
Il codice Javascript dovrebbe essere di natura "fire-and-forget" e se le cose devono attendere che si verifichi un evento prima di procedere, si dovrebbe guardare il modello di eventi javascript.
Mentre questa è una programmazione sconveniente quando si vuole fare qualcosa di banale, è probabile che si stia usando la pausa per aspettare in un modo che potrebbe imbattersi in condizioni di gara per cominciare, e che c'è un modo più appropriato per "effetto" che stai cercando di raggiungere.
Se pubblichi il tuo caso PARTICOLAR, potrebbero esserci ulteriori informazioni su come affrontare una situazione del genere.
Cheers,
Puoi esporre un po 'il tuo esempio? Sembra un 'setInterval()' è ciò che stai cercando, ma non sono al 100% chiaro sul tuo caso d'uso. –