2-4 CPS (continuation-passing style)

cps是callback使用上的特例,形式上就是在函數最後呼叫callback,這樣就好像把函數執行後把結果交給callback繼續運行,所以稱作continuation-passing style。利用cps,可以在非同步執行的情況下,透過傳給callback的這個cps callback來獲知callback執行完畢,或是取得執行結果。例如:

<html>
<body>
<div id="panel" style="visibility:hidden"></div>
</body>
</html>
<script>
var request = new XMLHttpRequest();
request.open('GET', 'test749.txt?timestamp='+new Date().getTime(), true);
request.addEventListener('readystatechange', function(next){
return function() {
if(this.readyState===4&&this.status===200) {
next(this.responseText);//<==傳入的cps callback在動作完成時執行並取得結果進一步處理
}
};
}(function(str){//<==這個匿名函數就是cps callback
document.getElementById('panel').innerHTML=str;
document.getElementById('panel').style.visibility = 'visible';
}), false);
request.send();
</script>

進一步的應用,也可以參考2-6 流程控制


Comments