摘要:一旦請求事件多了,就避免不了回調地獄,回調很可能容易一層接著一層。的意思是承諾,作用和回調函數相似,在未來的某個時刻執行某件事情。但是的寫法更加簡約易用,更加符合我們平常的思維。
發布自Kindem的博客,歡迎大家轉載,但是要注意注明出處。另外,該文章收納在Kindem的個人的 IT 知識整理倉庫,歡迎 Star、Fork、投稿Promise
由于JavaScript是單線程的,所以回調是JavaScript中避免不了的,所有的網絡請求、瀏覽器事件都需要使用回調的方式異步處理。
一旦請求、事件多了,就避免不了回調地獄,回調很可能容易一層接著一層。
Promise的意思是承諾,作用和回調函數相似,在未來的某個時刻執行某件事情。但是Promise的寫法更加簡約易用,更加符合我們平常的思維。
UsagePromise是一個對象,在ES6已經被規范成了原生JavaScript的一部分,但是在ES6之前,則需要使用第三方庫來實現
Promise分為三個狀態:
pending: 執行中
resolved: 已完成
rejected: 已失敗
Promise對象被實例化的那一刻,傳入構造函數的方法將會被執行,并且進入pending狀態,而一旦完成或者失敗,則會進入相應的狀態,這一過程是不可逆的
他的用法(ES6)如下:
let promise = new Promise((resolve, reject) => { if (...) { // 如果成功了 resolve(...); } else { // 如果失敗了 reject(...); } });
這里的resolve和reject兩個方法可以使用下面的方法來給與:
promise .then(onSuccess) .catch(onFailed);
傳遞給then的方法將在承諾執行成功時被調用,傳遞給catch的方法將在承諾執行失敗時被調用
更加方便的一點是,Promise往往可以嵌套使用,這樣可以是多個任務有條不紊地進行,假設p1是一個Promise對象而p2、p3都是能夠產生Promise對象的方法(如果直接new那么Promise將會被直接執行),那么你可以這樣寫,使得他們按照順序執行,并且可以一次性處理他們產生的錯誤
p1 .then(p2) .then(p3) .then(onSuccess) .catch(onFailed);
比如:
let p1 = new Promise((resolve, reject) => { console.log("p1"); setTimeout(() => { resolve("p2"); }, 1000) }); let p2 = (result) => new Promise((resolve, reject) => { console.log(result); setTimeout(() => { resolve("p3"); }, 2000); }); let p3 = (result) => new Promise((resolve, reject) => { console.log(result); setTimeout(() => { resolve("over"); }, 3000); }); p1 .then(p2) .then(p3) .then((result) => { console.log(result); }) .catch((error) => { console.log(error); });
運行可以看見:
p1 p2 p3 over
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/96958.html
摘要:對于的來說基元函數包括組合函數的類型簽名返回情況完成如果傳入的可迭代對象為空,會同步地返回一個已完成狀態的。相反,如果是在指定的時間之后完成,剛返回結果就是一個拒絕狀態的從而觸發方法指定的回調函數。在行中,對每個小任務得到的結果進行匯總。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優質文章請猛戳GitHub博客,一年百來篇優質文章等著你! 從ES6 開始,我們大都使用的是 P...
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。寫一個符合規范并可配合使用的寫一個符合規范并可配合使用的理解的工作原理采用回調函數來處理異步編程。 JavaScript怎么使用循環代替(異步)遞歸 問題描述 在開發過程中,遇到一個需求:在系統初始化時通過http獲取一個第三方服務器端的列表,第三方服務器提供了一個接口,可通過...
摘要:寫在前面這一章的順序對于未接觸過使用過的童鞋而言略抽象了,前邊幾章主要為了說明和之前的異步方式相比有什么優勢和它能解決什么問題,后邊才詳解的設計和各種場景下如何使用。建議先了解和簡單使用過后再閱讀,效果更佳。 寫在前面:Promise這一章的順序對于未接觸過使用過Promise的童鞋而言略抽象了,前邊幾章主要為了說明Promise和之前的異步方式相比有什么優勢和它能解決什么問題,后邊才...
摘要:已完成意味著操作成功完成。處理實例實例生成以后,可以用方法分別指定狀態和狀態的回調函數。第二個回調函數在的狀態變成時被調用。方法是的別名,用于指定發生錯誤時的回調函數。具體的使用示例如下情形一全部成功的情況結果為。 一.關于Promise promise 是異步編程的一種解決方案,比傳統的解決方案(回調函數和事件)更合理和更強大。它由社區最早提出和實現,ES6將其寫進了語言標準,統一了...
摘要:構造函數規定,對象是一個構造函數,用來生成實例。如果中的回調函數拋出一個錯誤,那么返回的將會成為拒絕狀態,并且將拋出的錯誤作為拒絕狀態的回調函數的參數值。 其實想寫 Promise 的使用已經很長時間了。一個是在實際編碼的過程中經常用到,一個是確實有時候小伙伴們在使用時也會遇到一些問題。Promise 也確實是 ES6 中 對于寫 JS 的方式,有著真正最大影響的 API 特性之一。本...
閱讀 479·2021-10-09 09:57
閱讀 484·2019-08-29 18:39
閱讀 822·2019-08-29 12:27
閱讀 3037·2019-08-26 11:38
閱讀 2677·2019-08-26 11:37
閱讀 1303·2019-08-26 10:59
閱讀 1390·2019-08-26 10:58
閱讀 997·2019-08-26 10:48