dojo/Deferred, dojo/when
簡介
dojo/Deferred 是 dojo 中實作 dojo/promise/Promise 的類別,也是使用 promise 的基礎元件。當一個作業要在非同步狀態下執行,而其它作業有可能必須在此作業完成後方能執行時;該作業在實作時便應宣告且產生一個 Deferred 類別的實體 (instance),並傳回一個 promise。後繼要執行的作業則作為 promise.then() 的參數,在 promise 被「滿足」(fulfilled) 時執行。因為 promise.then() 也會傳回一個 promise;所以,整個程序可以一直串接下去,形成一個執行鏈。
dojo/when 只是 promise.then() 的一個簡單寫法。
範例

範例中建立了兩個圓形,點按左邊的圓形以模擬非同步的作業,右邊的圓形則顯示作業的進度,及顯示最終的結果。設定為點按三次左邊圓形便完成作業。修改一下程式碼可以產生「拒絕」(reject) 的結果。
CSS
<style>
html {
width:100%;
height:100%;
}
body {
margin: 0 auto;
width:1000px;
height:100%;
padding-top:20px;
}
#counter {
margin:20px;
height:100px;
width:100px;
border:10px solid black;
border-radius: 50%;
font-size: 48px;
text-align: center;
line-height: 100px;
float:left;
}
#response {
margin:20px;
height:100px;
width:100px;
border:10px solid black;
border-radius: 50%;
font-size: 48px;
text-align: center;
line-height: 100px;
background-color: white;
float:left;
}
</style>
#counter 設定左邊圓形的屬性。
#response 設定右邊圓形的屬性。
HTML
<body class="claro">00</body>
HTML 則建立兩個 <div>,用來顯示左、右兩個圓形。
Script
取消第 36 ~ 40 行的註解並註解第 43 ~ 47 行;在點按左邊圓形三次後,會產生「拒絕」的結果,此時會執行第 62 ~ 70 行的程式。
第 54 ~ 80 用 when 的語法寫,則如下所示:
沒有留言:
張貼留言