国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript-中的Promise使用詳解

2019-11-02 14:44:09
字體:
來源:轉載
供稿:網友

   這篇文章主要介紹了JavaScript中的Promise使用詳解,promise對象是JS進階學習中的重要知識點,需要的朋友可以參考下

  許多的語言,為了將異步模式處理得更像平常的順序,都包含一種有趣的方案庫,它們被稱之為promises,deferreds,或者futures。JavaScript的promises ,可以促進關注點分離,以代替緊密耦合的接口。 本文講的是基于Promises/A 標準的JavaScript promises。[http://wiki.commonjs.org/wiki/Promises/A]

  Promise的用例:

  執行規則

  多個遠程驗證

  超時處理

  遠程數據請求

  動畫

  將事件邏輯從應用邏輯中解耦

  消除回調函數的恐怖三角

  控制并行的異步操作

  JavaScript promise是一個承諾將在未來返回值的對象。是具有良好定義的行為的數據對象。promise有三種可能的狀態:

  Pending(待定)

  Rejected(拒絕)

  Resolved(已完成)

  一個已經拒絕或者完成的承諾屬于已經解決的。一個承諾只能從待定狀態變成已經解決的狀態。之后,承諾的狀態就不變了。承諾可以在它對應的處理完成之后很久還存在。也就是說,我們可以多次取得處理結果。我們通過調用promise.then()來取得結果,這個函數一直到承諾對應的處理結束才會返回。我們可以靈活的串聯起一堆承諾。這些串聯起來的“then”函數應該返回一個新的承諾或者最早的那個承諾。

  通過這個樣式,我們可以像寫同步代碼一樣來寫非同步代碼。主要是通過組合承諾來實現:

  堆棧式任務:多處散落在代碼中的,對應同一個承諾。

  并行任務:多個承諾返回同一個承諾。

  串行任務:一個承諾,然后接著執行另一個承諾。

  上面幾種的組合。

  為什么要這么麻煩?只用基本的回調函數不行嗎?

  回調函數的問題

  回調函數適合簡單的重復性事件,例如根據點擊來讓一個表單有效,或者保存一個REST調用的結果。回調函數還會使代碼形成一個鏈,一個回調函數調用一個REST函數,并為REST函數設置一個新的回調函數,這個新的回調函數再調用另一個REST函數,依此類推。代碼的橫向增長大于縱向的增長。回調函數看起來很簡單,直到我們需要一個結果,而且是立刻就要,馬上就用在下一行的計算中。

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 'use strict'; var i = 0; function log(data) {console.log('%d %s', ++i, data); };   function validate() { log("Wait for it ..."); // Sequence of four Long-running async activities setTimeout(function () { log('result first'); setTimeout(function () { log('result second'); setTimeout(function () { log('result third'); setTimeout(function () { log('result fourth') }, 1000); }, 1000); }, 1000); }, 1000);   }; validate();

  我使用timeout來模擬異步操作。管理異常的方法是痛苦的,很容易玩漏下游行為。當我們編寫回調,那么代碼組織變得混亂。圖2顯示了一個模擬驗證流可以運行在NodeJS REPL。在下一節,我們將從pyramid-of-doom模式遷移到一個連續的promise。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永寿县| 永靖县| 社会| 白山市| 临清市| 新龙县| 三都| 岱山县| 桦南县| 辽宁省| 白山市| 丽江市| 泉州市| 米泉市| 达州市| 灵丘县| 凤翔县| 勃利县| 安义县| 紫金县| 南通市| 廉江市| 泾源县| 西昌市| 蒙城县| 白河县| 吉水县| 海南省| 鄂伦春自治旗| 富平县| 竹北市| 额济纳旗| 博客| 剑川县| 石棉县| 沈丘县| 黔南| 上思县| 韶山市| 专栏| 会昌县|