淺談JavaScript非同步編程,淺談javascript非同步

來源:互聯網
上載者:User

淺談JavaScript非同步編程,淺談javascript非同步

在一年前初學js的時候,看過很多關於非同步編程的講解。但是由於實踐經驗少,沒有辦法理解的太多,太理論的東西也往往是看完就忘。

經過公司的三兩個項目的鍛煉,終於對js非同步編程有了比較具體的理解。但始終入門較淺,在這裡就當是給自己一個階段性的總結。

在非同步編程中,一條語句的執行不能依賴上一條語句執行完畢的結果,因為無法預測一條語句什麼時候執行完畢,它與代碼順序無關,語句是並發執行的。

例如以下代碼:

$.get($C.apiPath+'ucenter/padCharge/findMember',{id:memberId},function(data){  if(data.error){    layer.close(memberLayer);    padInOut(padId,memberId);    allPads();  }});

這三句在語境中的作用是,在完成某個ajax訪問並成功獲得資料之後,關閉某個彈層(1),執行padInOut函數(2),執行allPads函數(3);(1)的順序無所謂,但是我希望(3)在(2)之後執行,然而這幾句代碼無法達到我希望的結果,因為三個函數是同時執行的,allPads無法等待padInOut執行完畢之後再執行,所以結果當然會出錯。

我最後採取的解決方案是回呼函數:在padInOut函數定義加入回呼函數,如下:

function padInOut(padId,memberId,callback){     $F.POSTLoading($C.apiPath + 'ucenter/padCharge/padInOut',{id:padId,memberId:memberId},function(data){         if(callback)callback()     }); }; 

當方法執行完畢並且回呼函數存在時,執行回呼函數。此時函數執行時通過傳參即可達到目的:

padInOut(padId,memberId,allPads)

回呼函數是js非同步編程經常會用到的方法。然而使用回呼函數存在不好的地方,即會造成回調地獄。所以es新標準出來也不斷尋求解決回調的方案。這是後話,本篇寫到這裡。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的協助,同時也希望多多支援幫客之家!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.