作者TKirby ( :D)
看板Ajax
标题Re: [js] javascript sleep
时间Sat Sep 22 01:20:14 2007
不太清楚 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
1F:推 TonyQ:我就是要找停住执行绪的处理方式 , 前面有其中之一解法, 09/22 02:28
2F:→ TonyQ:你这个算是非同步的方式:P 09/22 02:28