首頁 > web前端 > js教程 > 主體

javascript非同步程式設計方法有哪些

清浅
發布: 2019-04-19 13:07:41
原創
3144 人瀏覽過

JavaScript實現非同步程式設計的方法有:易於理解和實作但是程式碼不好維護的回呼方法,發布/訂閱方法,易於理解並且可綁定多個事件但是工作流程混亂的事件監聽方法,Promises方法

非同步模式是非常重要,在瀏覽器端長時間運行的操作應該非同步執行,以避免不回應。接下來將在文章中為大家詳細介紹JavaScript中非同步程式設計方法的實現,具有一定參考作用,希望對大家有幫助。

javascript非同步程式設計方法有哪些

【推薦課程:#JavaScript教學##】

大家都知道JavaScript的執行環境是單執行緒的,單執行緒就代表在任何時候都只能執行一個任務。如果遇到多任務的時候就需要在佇列中等待上一任務的完成。因此耗費時間比較多,同步模式就類似這種單執行緒模式,非同步模式是完全不同的,每個任務都有一個回呼函數,當一個任務完成後,它將執行回調函數,後面的任務可以與前一個任務同時運行。任務的執行順序與佇列中的任務序列不同。

方法一:回呼方法

這個方法是非同步程式設計的基本方法,假設有兩個函數f1和f2,後者會等待第一個函數的結果。

F1(); 
F2();
登入後複製

如果f1是長時間運行的操作,則可以重寫f1並將f2作為f1的回呼函數。

function f1(callback){
setTimeout(function () {
 callback();
    }, 1000);
}
登入後複製

使用此模式,同步操作就可以轉換為非同步操作,f1不會阻止程式執行,它會將先執行主邏輯然後再執行耗時的操作

#回呼函數的優點是易於理解和實現,缺點是程式碼不可讀和可維護,不同的元件高度耦合,工作流程非常混亂,每個任務只能有一個回調函數。

方法二:發布/訂閱

此事件可以理解為訊號,假設存在訊號中心,如果一個任務完成,它將向訊號中心發布訊號,其他任務可以從訂閱訊號中心接收指定訊號。這種方法就稱為發布/訂閱模式或是觀察者模式。

範例:f2向訊號中心訂閱完成訊號

jQuery.subscribe(“done”,f2);
登入後複製

然後寫f1為

function f1(){
    setTimeout(function () {
     jQuery.publish("done");
    }, 1000);
}
登入後複製

jQuery.publish(「done」)表示當f1完成執行時它將向訊號中心發送完成訊號,然後f2將開始執行。

當f2完成執行時,它可以取消訂閱。

jQuery.unsubscribe(“done”,f2);
登入後複製

方法三:事件監聽

另一種方法是事件驅動模式,一個任務的執行不依賴程式碼順序,它們等待一個事件發生。在本例中仍然使用f1和f2,首先將一個事件綁定到f1。

f1.on('done',f2);
登入後複製

上述程式碼的意思是如果f1完成事件發生,則執行f2。

function f1(){
    setTimeout(function () {
      f1.trigger('done');
    }, 1000);
}
登入後複製

f1.trigger('done')表示它將觸發done事件,然後在執行完成時執行f2。

優點是它易於理解並且可以綁定多個事件,每個事件都可以具有許多回調函數,並且它可以解耦哪個有利於模組化。缺點是整個程式將被事件驅動,工作流程不是很清楚。

方法四:Promises方法

Promises物件是CommonJS提出的標準,目的是為非同步程式設計提供通用介面。每個非同步任務都會傳回一個Promises對象,這個物件有一個允許設定回呼函數的then方法。例如,f1的回呼函數f2:

F1().then(F2)
登入後複製

f1應寫成:

function f1(){
    var dfd = $.Deferred();
    setTimeout(function () {
        dfd.resolve();
    }, 500);
    return dfd.promise;
}
登入後複製

#優點是回呼函數是連結的,程式的工作流程非常清晰,它有一套完整的連結方法,可用於實現強大的功能。

例如,設定多個回呼函數:

f1().then(f2).then(f3);
登入後複製

還有一個例子,如果有錯誤:

f1().then(f2).fail(f3);
登入後複製

其他三種方法不具備的一個優點是一旦完成一個任務,如果添加更多的回調函數,它們將立即執行。缺點是它不容易理解。

總結:以上就是這篇文章的全部內容了,希望對大家有幫助。

以上是javascript非同步程式設計方法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!