亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js中自定義方法實現停留幾秒sleep

2019-11-20 14:21:32
字體:
來源:轉載
供稿:網友

js中不存在自帶的sleep方法,要想休眠要自己定義個方法

function sleep(numberMillis) { var now = new Date(); var exitTime = now.getTime() + numberMillis; while (true) { now = new Date(); if (now.getTime() > exitTime) return; } }

以下是補充:

除了Narrative JS,jwacs(Javascript With Advanced Continuation Support) 也致力于通過擴展JavaScript語法來避免編寫讓人頭痛的異步調用的回調函數。用jwacs 實現的sleep,代碼是這樣:

復制代碼 代碼如下:

function sleep(msec) {
    var k = function_continuation;
    setTimeout(function() { resume k <- mesc; }, msec);
    suspend;
}

這個語法更嚇人了,而且還是java里不被推薦使用的線程方法名。坦白說我傾向于 Narrative JS。

同Narrative JS一樣,jwacs也需要預編譯,預編譯器是用 LISP 語言編寫。目前也是 Alpha 的版本。兩者的更多介紹和比較可以參閱 SitePoint 上的新文章: Eliminating async Javascript callbacks by preprocessing

編寫復雜的JavaScript腳本時,有時會有需求希望腳本能停滯指定的一段時間,類似于 java 中的 Thread.sleep 或者 sh 腳本中的 sleep 命令所實現的效果。

眾所周知,JavaScript 并沒有提供類似于 Java 的線程控制的功能, 雖然有 setTimeout 和 setInterval 兩個方法可以做一些定時執行控制,但并不能滿足所有的要求。一直以來,都有很多人問如何在JavaScript中實現 sleep/pause/wait ,也確實有些很蹩腳的解決方案:

最簡單也最糟糕的方法就是寫一個循環,代碼可能如下:

復制代碼 代碼如下:

function sleep(numberMillis) {
    var now = new Date();
    var exitTime = now.getTime() + numberMillis;
    while (true) {
        now = new Date();
        if (now.getTime() > exitTime)
            return;
    }
}

如上的代碼其實并沒有讓腳本解釋器sleep下來,而且有讓CPU迅速上到高負荷的附作用。瀏覽器甚至會在該段時間內處于假死狀態。

其二有聰明人利用IE特殊的對話框實現來曲徑通幽,代碼可能如下:

復制代碼 代碼如下:

function sleep(timeout) {
 window.showModalDialog("javascript:document.writeln('<script>window.setTimeout(function () { window.close(); }, " + timeout + ");<//script>');");
}window.alert("before sleep ...");
sleep(2000);
window.alert("after sleep ...");

缺點不用多說,只有IE支持(IE7因為安全限制也而不能達到目的)。

除上之外,還有利用Applet或者調用Windows Script Host的WScript.Sleep()等等鬼點子,這些都是萬不得已的權宜之計。

終于有了更聰明的人,開發出了也許是最佳的方案,先看代碼:

復制代碼 代碼如下:

function sleep(millis) {
    var notifier = NjsRuntime.createNotifier();
    setTimeout(notifier, millis);
    notifier.wait->();
}

沒錯,看到 ->() 這樣的語法,就象剛看到Prototype的 $() 函數一樣讓我驚為天人。不過直接在瀏覽器中這段腳本是會報告語法錯誤的。實際上它們需要經過預編譯成客戶端瀏覽器認可的JavaScript。編譯后的腳本如下:

復制代碼 代碼如下:

function sleep(millis){
var njf1 = njen(this,arguments,"millis");
nj:while(1) {
try{switch(njf1.cp) {
case 0:njf1._notifier=NjsRuntime.createNotifier();
setTimeout(njf1._notifier,njf1._millis);
njf1.cp = 1;
njf1._notifier.wait(njf1);
return;
case 1:break nj;
}} catch(ex) {
if(!njf1.except(ex,1))
return;
}}
njf1.pf();
}

我看不懂,也不想去看懂了。這些工作全部會由 Narrative JavaScript ―――― 一個提供異步阻塞功能的JS擴展幫我們實現。我們只需要編寫之前那個怪異的 ->() 語法, 然后通過后臺預先靜態編譯或者前臺動態編譯后執行就可以實現 sleep 的效果。
Narrative JavaScript 宣稱可以讓你從頭昏眼花的回調函數中解脫出來,編寫清晰的Long Running Tasks。目前還是 alpha 的版本,在 Example 頁面上有一個移動的按鈕的范例。首頁上也提供了源碼下載。以我薄弱的基礎知識,我只能勉強的看出代碼中模擬了狀態機的實現,希望有精通算法的朋友能為我們解析。
最后,還是我一直以來的觀點: 除非很必要,否則請保持JavaScript的簡單。在JavaScript 能提供原生的線程支持之前,或許我們可以改變設計以避免異步阻塞的應用。

有bug的曲折實現

<script type"text/javascript">/*Javascript中暫停功能的實現Javascript本身沒有暫停功能(sleep不能使用)同時 vbscript也不能使用doEvents,故編寫此函數實現此功能。javascript作為弱對象語言,一個函數也可以作為一個對象使用。比如:[code]function Test(){ alert("hellow"); this.NextStep=function(){ alert("NextStep"); }}我們可以這樣調用 var myTest=new Test();myTest.NextStep();我們做暫停的時候可以吧一個函數分為兩部分,暫停操作前的不變,把要在暫停后執行的代碼放在this.NextStep中。為了控制暫停和繼續,我們需要編寫兩個函數來分別實現暫停和繼續功能。暫停函數如下:*/function Pause(obj,iMinSecond){ if (window.eventList==null) window.eventList=new Array(); var ind=-1; for (var i=0;i<window.eventList.length;i++){ if (window.eventList[i]==null) {  window.eventList[i]=obj;  ind=i;  break; } }  if (ind==-1){ ind=window.eventList.length; window.eventList[ind]=obj; } setTimeout("GoOn(" + ind + ")",1000);}/*該函數把要暫停的函數放到數組window.eventList里,同時通過setTimeout來調用繼續函數。繼續函數如下:*/function GoOn(ind){ var obj=window.eventList[ind]; window.eventList[ind]=null; if (obj.NextStep) obj.NextStep(); else obj();}/*該函數調用被暫停的函數的NextStep方法,如果沒有這個方法則重新調用該函數。函數編寫完畢,我們可以作如下冊是:*/function Test(){ alert("hellow"); Pause(this,1000);//調用暫停函數 this.NextStep=function(){ alert("NextStep"); }}</script>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产999在线观看| 一区二区欧美久久| 91系列在线播放| 日本道色综合久久影院| 亚洲奶大毛多的老太婆| 97色伦亚洲国产| 国产精品私拍pans大尺度在线| 亚洲网在线观看| 亚洲男人天堂网| 成人在线小视频| 5566日本婷婷色中文字幕97| 久热精品视频在线观看一区| 国产精品成人国产乱一区| 日韩欧美综合在线视频| 成人av.网址在线网站| 亚洲精品日韩欧美| 国产一区二区免费| 亚洲精品xxxx| 亚洲美女视频网站| 91视频九色网站| 亚洲最大av网| 92国产精品视频| 亚洲综合精品一区二区| 国产盗摄xxxx视频xxx69| 国产福利精品在线| 亚洲视频在线免费看| 亚洲二区在线播放视频| 日韩av男人的天堂| 日韩精品一区二区三区第95| 欧美日韩午夜激情| 91精品国产91久久久久久不卡| 亚洲深夜福利网站| 中文字幕日韩精品在线观看| 欧美电影免费观看电视剧大全| 91精品中国老女人| 亚洲精品一区二区三区不| 国产精品美女久久| 久久影视电视剧免费网站清宫辞电视| 亚洲**2019国产| 国产精品久久久久久久久免费| 最近2019中文字幕第三页视频| 日韩av一区在线观看| 亚洲日本成人女熟在线观看| 欧美多人乱p欧美4p久久| 日韩在线播放视频| 91国产视频在线播放| 欧美日韩国产中文字幕| 国产精品中文久久久久久久| 午夜精品一区二区三区av| 亚洲欧洲日产国产网站| 国产精品免费视频xxxx| 亚洲成人动漫在线播放| 久久精品国产精品| 日韩精品久久久久| 欧美日韩国产色视频| 亚洲人成人99网站| 欧美日韩激情小视频| 亚洲四色影视在线观看| 国产精品日日摸夜夜添夜夜av| 日韩av网站大全| 国产精品日韩欧美大师| 国产综合在线观看视频| 日韩在线视频免费观看高清中文| 性欧美激情精品| 欧美激情xxxx| 中文字幕亚洲欧美日韩在线不卡| 欧美日韩亚洲天堂| 欧亚精品在线观看| 热99久久精品| 91香蕉嫩草神马影院在线观看| 在线观看免费高清视频97| 欧美在线亚洲一区| 亚洲在线视频观看| 亚洲欧洲国产一区| 日本久久久a级免费| 亚洲欧美精品中文字幕在线| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲成人网在线| 日韩免费av一区二区| 国产极品精品在线观看| 国产欧美日韩精品专区| 国产日韩欧美91| 日韩成人激情视频| 国产午夜精品一区理论片飘花| 免费91麻豆精品国产自产在线观看| 欧美—级高清免费播放| 亚洲精品久久久久久下一站| 欧美日韩亚洲天堂| 亚洲一区二区三区在线视频| 久久乐国产精品| 欧美视频在线观看免费| 日韩有码视频在线| 久久香蕉国产线看观看网| 日韩高清人体午夜| 欧美黑人巨大精品一区二区| 亚洲无亚洲人成网站77777| 最新中文字幕亚洲| 久久精品国产96久久久香蕉| 国产精品高清网站| 超碰91人人草人人干| 日本一区二区在线免费播放| 国产亚洲视频中文字幕视频| 国产小视频国产精品| 日本一区二区三区四区视频| 欧美性理论片在线观看片免费| 91九色精品视频| 国产一区二区动漫| 91久久久久久久久久| 国产欧美韩国高清| 欧美亚洲成人免费| 亚洲电影免费观看高清完整版| 成人黄色大片在线免费观看| 久久久免费观看| 亚洲日本欧美中文幕| 日韩欧美在线免费观看| 日本久久久久久| 一区二区中文字幕| 久久国产精品久久久久久| 91久久精品久久国产性色也91| 日韩精品在线观看一区| 欧美寡妇偷汉性猛交| 一区二区三区视频观看| www.午夜精品| 91麻豆桃色免费看| 欧美成人四级hd版| 91高清视频在线免费观看| 亚洲国产小视频在线观看| 狠狠久久五月精品中文字幕| 色综合久久中文字幕综合网小说| 国产精品电影久久久久电影网| 国产日韩欧美在线看| 国产精品一区=区| 日韩视频亚洲视频| 欧美限制级电影在线观看| 91影院在线免费观看视频| 欧美高清videos高潮hd| 国产精品香蕉在线观看| 欧美在线观看日本一区| 一区二区在线视频播放| 2021久久精品国产99国产精品| 国产精品极品美女粉嫩高清在线| 亚洲最大福利视频网| 欧美激情在线一区| 2018日韩中文字幕| 日韩欧美在线一区| 91精品国产色综合久久不卡98口| 欧美成人免费一级人片100| 中文字幕av一区| 国产精品亚洲网站| 成人性教育视频在线观看| 国产丝袜精品视频| 国产精品视频自在线| 欧美黑人性生活视频| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲精品乱码久久久久久按摩观| 日韩精品免费看| 国产精品视频专区| 国产日韩欧美91| 亚洲欧美精品一区| 亚洲福利视频二区| 欧美日韩中文字幕日韩欧美| 日本一区二三区好的精华液| 国产精品色午夜在线观看| 欧美一区二粉嫩精品国产一线天|