Re: [js] javascript sleep
不太清楚 TonyQ 要的同步鎖定是什麼意思
是說目前這一個執行緒到這邊要暫停住嗎?
據我印象中好像沒有可以專門用來停住執行緒的單一函式
但是我們倒是可以留住這個執行緒目前的 context
我大概試了一下, 雖然不知道是不是你需要的功能
但參考一下也無可厚非
其中 print(s) wrap 了類似 body.innerHTML+=s 的東西
function sleep(sec) {
var obj = new Object();
setTimeout(function() { obj.after(); },sec*1000);
return obj;
}
function foo() {
var bar = arguments.callee;
var node = "World";
print("Hello");
sleep(2).after = function() {
print(node);
};
}
雖然 sleep(sec) 是用 setTimeout 在 sec 秒後呼叫之後的 anonymous function
可是 context 還是在 foo() 裡面, 只是 callee 變 這個子函式了
然後, 如果要多次呼叫 sleep 的話會變成多層巢狀函式, 比較不好看
當然這兩點都有 workaround 的方法就是了
※ 引述《gpmm (銀色)》之銘言:
: ※ 引述《TonyQ (骨頭)》之銘言:
: : → TonyQ:好吧 , 它並不是那麼的好用 , 當它開啟的時候會擋到原本頁面 09/20 04:44
: : → TonyQ:的事件 , 真是遺憾 orz 09/20 04:45
: [蘇姍]
: 半懂你的意思,另一半用猜想的。
: 純 Ajax timeout 我找到過一個很蠢卻很有用的方式,
: request 出去給 php 做 sleep 等它回來,不過這我想不是你要的 XD
: 因為 server 掛點一樣無效。
: 我猜想你需要的是避免 server 掛或網路斷時 Explore wait 過久的機制,
: 小弟也做過類似的東西。
: 在 request send 出去時同時執行一個全域的 setTimeout 或 setInterval,
: 然後在兩個地方解鎖,其一是循環檢查的 func 裡,另一個是 request handle 的
: 地方。
: 如果由循環檢查的 func 發現超時則將原本應該顯示回傳的地方重製成錯誤顯示訊息。
: 不知道這是不是你要的 o_oa"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.51
推
09/22 02:28, , 1F
09/22 02:28, 1F
→
09/22 02:28, , 2F
09/22 02:28, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章