Javascript Promise 學習筆記

来源:http://www.cnblogs.com/pengchen/archive/2016/04/21/5419412.html
-Advertisement-
Play Games

1. 定義:Promise是抽象非同步處理對象以及對其進行各種操作的組件,它把非同步處理對象和非同步處理規則採用統一的介面進行規範化。 2. ES6 Promises 標準中定義的API: a) Constructor:採用new來實例化, var promise = new Promise(functi... ...


1.     定義:Promise是抽象非同步處理對象以及對其進行各種操作的組件,它把非同步處理對象非同步處理規則採用統一的介面進行規範化。

 

2.     ES6 Promises 標準中定義的API

a)  Constructor:採用new來實例化,
var promise = new Promise(function(resolve, reject) {…});

b)  Instance Method:使用then方法設置成功(resolve)失敗(reject)時的回調函數,     

       promise.then(onFulfilled, onRejected)

promise.catch(onRejected)其中,catch只是then的別名而已;

c)  Static Method:一些其他的輔助方法,比如all()resolve()

 

3.     Promise 狀態。三種狀態:Pending(初始化)FulfilledRejected。在then後執行的函數可以肯定地說只會被調用一次。

promise對象被 resolve 時的處理 onFulfilled

promise對象被 reject 時的處理 onRejected

image

1. Promise調用的執行過程

 

4.     Resolve方法:

a)  靜態方法Promise.resolve(value)可以認為是new Promise()方法的快捷方式,是一種語法糖;Promise.reject(error)與之類似;

b)  Promise.resolve方法另一個作用就是將thenable對象轉換為promise對象,比如jQuery.ajax()

 

5.     Promise在規範上規定Promise只能使用非同步調用方式 。所以,promise.then實際上是屬於非同步調用的。

 

6.     Promise方法鏈Promise可以將任意個方法連在一起作為一個方法鏈(method chain)。例如:

.then(taskA).then(taskB).catch(onRejected).then(finalTask);

方法鏈將方法串在一起,按照順序嚴格執行。

* 註意,ECMAScript 3catch是保留字,因此在IE8一下不能使用,所以,一般使用promise["catch"]或者then來代替之。

imageimage

2. Promise鏈式調用的執行過程

 

7.     每次調用then都會返回一個新創建的promise對象,應該儘量避免一個promise執行多個then方法,而是使用鏈式調用法。

 

8.    Promise和數組:Promise.all([…])在所有promise對象都變為 FulFilled Rejected 狀態之後被調用。Promise對象數組中所有promise方法同時調用。

Promise.race為任意一個方法變為 FulFilled Rejected 狀態之後被調用,在第一個promise對象變為Fulfilled之後,並不會取消其他promise對象的執行。

 

9.     Promise中的    then catch

a)  使用promise.then(onFulfilled, onRejected) 的話,在 onFulfilled 中發生異常的話,在 onRejected 中是捕獲不到這個異常的。

b)  promise.then(onFulfilled).catch(onRejected) 的情況下,then 中產生的異常能在 .catch 中捕獲

c)  .then .catch 在本質上是沒有區別的,需要分場合使用。

 

10.   Deferred擁有 PromiseDeferredPromise並不是處於競爭的關係,而是Deferred內涵了Promise。使用Deferred,只需要先創建deferred對象,可以在任何時機對 resolvereject 方法進行調用。
    var deferred = new Deferred();

本文摘自JavaScript Promise迷你書(中文版)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • × 目錄 [1]漂浮的白雲 [2]旋轉的星球 [3]正方體合成 前面的話 前面介紹過動畫animation的詳細用法,本文主要介紹動畫animation的三個效果 漂浮的白雲 【效果演示】 【簡要介紹】 漂浮的白雲主要通過遠景白雲和近景白雲來實現立體漂浮效果。遠景和近景分別使用兩張背景圖片,通過改變 ...
  • HTML5如火如荼,幾個月前的項目要部分應用新技術,尤其是簡單的文檔類型聲明<!DOCTYPE html>(不區分大小寫),非常吸引人。中途因為IE8等在第一次打開網頁時會阻止js執行,停在詢問頁面,導致新的標記無法識別使頁面十分混亂而作罷,但doctype的簡約定義仍在使用。可是在後續做到上圖下文 ...
  • 第五章和第六章間隔時間有點長,對不起大家了。下麵繼續。 本節教程將要教會大家如何載入本地通訊錄。 導入項目 導入通訊錄 自定義js模塊 發送和訂閱page消息 將要學習的demo效果圖如下所示 1. 導入完整項目 本節示例demo請參考下載地址,可以導入到設計器中學習。 這節教程中將要用到的組件有d ...
  • 今天要介紹的是走馬燈效果的製作,效果圖如下,頁面中‘Recent Posts’就是走馬燈部分。 現在我們介紹如何製作走馬燈,首先定義html頁面結構。 <div id="outer"> <header> ... </header> <article> ... </article> <aside> . ...
  • 在React中,一切都是看做組件。 而組件的嵌套也是十分常見的。 所以有的組件就作為容器組件 容器組件 React元素可以包含子元素 如 1 //JSX 2 <ezpanel title="title"> 3 <p>this is demo content</p> 4 </ezpanel> 在Rea ...
  • 儘管 JavaScript 歷史上使用冗長而令人生厭的代碼塊來標的特定瀏覽器的時期已經結束了,但是偶爾使用一些簡單的代碼塊和對象檢測來確保一些代碼在用戶機器上正常工作依然是必要的。 這篇文章中,我會略述一下 Internet Explorer 和 Firefox 在 JavaScript 語法上不同 ...
  • 知道這20個正則表達式,能讓你少寫1,000行代碼 正則表達式,一個十分古老而又強大的文本處理工具,僅僅用一段非常簡短的表達式語句,便能夠快速實現一個非常複雜的業務邏輯。熟練地掌握正則表達式的話,能夠使你的開發效率得到極大的提升。 正則表達式經常被用於欄位或任意字元串的校驗,如下麵這段校驗基本日期格 ...
  • line-height這個樣式相信大家一定不會陌生,我們經常用它來讓文本上下居中,這樣做一般不出出現什麼問題,但是如果對這個屬性不是很熟悉的話,可能會踩到一些坑,今天親自去試驗了一下,並總結了一下line-height的幾個特性。 首先line-height有以下幾種標準的寫法: 寫法1、line- ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...