国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

JavaScript系列之―同步還是異步?

2024-09-06 12:41:24
字體:
供稿:網(wǎng)友
從今天開始,我會不定期的寫一些關(guān)于JavaScript的東西,包括語言,應(yīng)用等方面。組成JavaScript系列。
如果沒有特殊的說明,這里假定JavaScript的執(zhí)行環(huán)境是在瀏覽器(browser)當(dāng)中的。
今天開始第一次,討論一下同步和異步。

曾經(jīng)查詢過一些JavaScript的信息,發(fā)現(xiàn)google出來的結(jié)果都是詢問JavaScript如何能夠?qū)崿F(xiàn)異步的代碼。
而我,很不幸,查詢的卻是如何讓JavaScript實現(xiàn)異步調(diào)用的同步(是不是挺起來很詭異)。

首先說一下JavaScript當(dāng)中的異步方法。
其實這個問題是大家經(jīng)常要碰到的。而且這個實現(xiàn)也很簡單。我就不多說了。
給兩段代碼

setTimeout方法,他讓你的代碼在指定的時間(毫秒)之后執(zhí)行指定的方法。只執(zhí)行一次。
比如:
alert(1);
setTimeout(”alert(2)”, 1000);
alert(3);
代碼在執(zhí)行到setTimeout的時候,會繼續(xù)執(zhí)行下面的代碼(alert(3))而不會被阻塞。等待1000ms之后執(zhí)行alert(2) 
setInterval方法,他讓你的代碼每隔指定的時間,執(zhí)行指定的方法,直到調(diào)用clearInterval
比如:
alert(1);
timer = setInterval(”alert(2)”, 1000);
alert(3);
代碼基本上和上面的相同,不同的是,每隔1000ms就會執(zhí)行一次alert(2),直到調(diào)用
clearInterval(timer); 
我們應(yīng)該注意到setTimeout和setInterval都是window的方法。
我們可以直接使用,但是規(guī)范的還是調(diào)用window.setTimeout window.setInterval,之所以提及這個,我會在以后的JavaScript系列中繼續(xù)講解。

現(xiàn)在該說一下我遇到的問題了。
我現(xiàn)在使用dwr作為AJAX的server端引擎,在調(diào)用dwr方法的時候,需要提供一個回調(diào)方法(callback function)來接受server的返回結(jié)果。
而這個回調(diào)方法是不會被阻塞的。此時browser回啟動另外的現(xiàn)成處理。
這個很好理解,因為dwr的這個方法執(zhí)行的時間是無法預(yù)料的,如果此時調(diào)用被阻塞,而server又花相當(dāng)長的時間進行處理。那么瀏覽器就會死在這里。從用戶體驗的角度是根本無法接受的。
這里的例子代碼是


ServerHandler.getString(”Weiming”, function (str) { //”Weiming”是傳回server的參數(shù)
alert(str);
}); // ServerHandler是dwr提供的server方法的interface,具體使用請參見dwr網(wǎng)站。
alert(1);
在執(zhí)行的過程中,會先執(zhí)行alert(1),然后在一個無法預(yù)料的時間后執(zhí)行alert(str)。
如果一次簡單的比如hello world的調(diào)用是不會出問題的。
但是如果我要執(zhí)行的一系列的dwr function是有前后順序的,比如后面執(zhí)行的需要前面的返回結(jié)果,簡單的代碼書寫順序是無法保證執(zhí)行順序的。
var myID = null;
ServerHandler.getID(function (id) {
myID = id; //無法預(yù)料何時會執(zhí)行這句話
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 山阳县| 金山区| 张北县| 龙口市| 林州市| 琼结县| 承德市| 连江县| 宁夏| 石棉县| 怀仁县| 南宁市| 腾冲县| 大宁县| 长岭县| 广灵县| 曲阜市| 汉阴县| 册亨县| 通山县| 涟水县| 富裕县| 九寨沟县| 临武县| 清徐县| 云安县| 北京市| 抚州市| 汕头市| 华宁县| 肃宁县| 娄烦县| 融水| 莱芜市| 临安市| 丰都县| 台州市| 宝山区| 迁安市| 旺苍县| 延吉市|