1. 程式人生 > >javascript實現非同步程式設計的4種方法

javascript實現非同步程式設計的4種方法

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);         })    })