後這個答案可能有點煩人,但是裸露在外:-)。
由於JavaScript通常在瀏覽器中運行,該瀏覽器是多線程的,其中的JavaScript可能佔用多個線程,因此沒有像在單線程程序中那樣使用「全局睡眠」的概念。
如果您想以任何合理的方式暫停操作,您可能需要考慮以下事項。
比方說,你需要將以下
function foo(s) {
var j = 1; var k = 1;
sleep(s); // This would be nice right?
window.alert("Sum is : " + (j+k));
}
實際上就變成了:
function foo(s) {
var j = 1 ; var k = 1;
setTimeout(s, function() {
window.alert("Sum is : " + (j+k));
});
}
當然,問題是,在一個程序意義上,你可能需要有像
function foo() {
do stuff;
pause();
do more stuff;
return;
}
function bar() {
foo(10);
window.alert("I want this to happen only after foo()");
}
問題是,你不能使用setTimeout來做到這一點,如上所示
但是你可以這樣做:
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' });
}
請注意,上面只有一個去了解信息傳遞給函數的方式,如果你看看函數調用約定,你可以做一些很酷的東西,可變參數等等
如果您在程序上思考,這很煩人。不過,關於JavaScript有兩點需要記住。它不是一種程序語言,NOR是一種面向對象的語言。 Javascript是一種具有複雜事件管理模型的功能語言。所以你必須用這些術語來思考。
它也是有道理的,因爲典型的JavaScript機器是一個gui(網絡瀏覽器),它在設計時並不想在處理某些東西時完全阻塞。想象一下,當一個頁面正在做某件事情時,你的瀏覽器完全鎖定了,你想要掐死那個給你的程序員。
Javascript代碼應該是'遺忘'性質的,如果事情在繼續之前必須等待事件發生,那麼您應該查看javascript事件模型。
雖然這是不方便的編程,當你想要做一些微不足道的事情時,你有可能使用暫停等待的方式,可能會遇到競爭條件開始,並有一個更合適的方式去你試圖實現的「效果」。
如果您發佈您的PARTICULAR案件,可能會有更多信息即將出現,以瞭解如何解決此類情況。
乾杯,
你能說一點你的例子嗎?這聽起來像是一個'setInterval()',但是我並沒有100%清楚你的用例。 – 2010-06-28 23:12:09