javascript實現非同步程式設計的4種方法
阿新 • • 發佈:2018-11-26
1、回撥函式。
2、事件監聽 。 思路:採用事件驅動模式。任務的執行不取決於程式碼的順序,而取決於某個事件是否發生
3、觀察者模式 (釋出/訂閱模式) 程式碼如下:
jQuery.subscribe("done", f2); function f1(){ setTimeout(function () { // f1的任務程式碼 jQuery.publish("done"); }, 1000); } jQuery.unsubscribe("done", f2);
jQuery.publish("done")的意思是,f1執行完成後,向"訊號中心"jQuery釋出"done"訊號,從而引發f2的執行。
此外,f2完成執行後,也可以取消訂閱(unsubscribe)。
注:這種觀察者模式的性質與"事件監聽"類似,但是明顯優於後者。因為我們可以通過檢視"訊息中心",瞭解存在多少訊號、每個訊號有多少訂閱者,從而監控程式的執行。
4、Promises物件
思路:每一個非同步任務返回一個Promise物件,該物件有一個then方法,允許指定回撥函式。比如,f1的回撥函式f2,可以寫成:
get:(opt)=>{ return new Promise((resolve,reject)=>{ if(opt.ve){ opt.ve['loading'] = true; } axios.get(fliterUrl(opt.url)).then((response)=>{ if(opt.ve){ opt.ve['loading'] = false; } resolve(response); }).catch((error)=>{ if(opt.ve){ opt.ve['loading'] = false; } reject(error); }) })