Promise

Promise對象表示異步操做的最終完成(或失敗)及其結果值數組

var promise1 = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('foo');
}, 300);
});promise

promise1.then(function(value) {
console.log(value);
// expected output: "foo"
});異步

console.log(promise1);
// expected output: [object Promise]async

 語法部分ide

new Promise( /* executor */ function(resolve, reject) { ... } );函數

執行者與參數resolve和傳遞的函數reject。該executor函數由Promise實現,傳遞resolvereject函數當即執行url

(在構造函數甚至返回建立的對象以前調用執行程序)。的和函數被調用時,解決或拒絕承諾,
分別。執行程序一般啓動一些異步工做,而後,一旦完成,要麼調用函數來解析promise ,要麼在發生錯誤
時拒絕它。若是執行程序函數中拋出錯誤,則拒絕承諾。執行程序的返回值將被忽略。
Promiseresolverejectresolve

描述部分

Promise是建立promise時不必定知道的值的代理。它容許您將處理程序與異步操做的最終成功值或失敗緣由相關聯。這容許異步方法返回相似於同步方法的值:異步方法返回一個承諾,在未來的某個時刻提供值,而不是當即返回最終值spa

Promise處於如下狀態之一:prototype

  • 待定:初始狀態,既未履行也未拒絕。
  • 履行:意味着操做成功完成。
  • 拒絕:意味着操做失敗。

待處理的承諾能夠使用實現也能夠使用緣由(錯誤)拒絕當這些選項中的任何一個發生時,將then調用由promise 方法排隊的關聯處理程序(若是在附加相應的處理程序時已經履行或拒絕了promise,則將調用該處理程序,所以在異步操做完成和附加處理程序之間沒有競爭條件。)代理

因爲Promise.prototype.then()Promise.prototype.catch()方法返回承諾,它們能夠被連接。

屬性部分

Promise.length
Length屬性,其值始終爲1(構造函數參數的數量)。
Promise.prototype
表示 Promise 構造函數的原型

方法

Promise.all(iterable)
返回一個promise,它在iterable參數中的全部promise都已知足時知足,或者在iterable參數中的一個promise中拒絕後當即拒絕。若是返回的promise履行,則使用與iterable中定義的順序相同的順序完成承諾中的值的數組來實現。若是返回的promise拒絕,它將被拒絕,其緣由來自可拒絕的iterable中的第一個promise。此方法可用於聚合多個承諾的結果。
Promise.race(iterable)
返回一個承諾,一旦迭代中的一個承諾履行或拒絕,就會履行或拒絕該承諾,並使用該承諾的價值或理由。
Promise.reject(reason)
返回 Promise 因給定緣由而被拒絕對象。
Promise.resolve(value)
返回 Promise 使用給定值解析對象。若是值是一個值得(即有一個 then 方法),那麼返回的promise將「跟隨」那個,而後採用它的最終狀態; 不然返回的承諾將與值一塊兒實現。一般,若是您不知道某個值是不是一個承諾, Promise.resolve(value) 那麼它將使用返回值做爲承諾。

承諾原型部分

屬性部分

Promise.prototype.constructor
返回建立實例原型的函數。這是 Promise 默認功能。

方法

Promise.prototype.catch(onRejected)
將拒絕處理程序回調附加到promise,並返回一個新的promise,若是調用它,則解析爲回調的返回值,若是相應地履行了promise,則返回其原始的履行值。
Promise.prototype.then(onFulfilled, onRejected)
將履行和拒絕處理程序附加到promise,並返回一個新的promise,解析爲被調用者的返回值,若是未處理promise(即相關處理程序 onFulfilled onRejected  不是函數),則返回其原始的已結算值  
Promise.prototype.finally(onFinally)
向promise添加處理程序,並返回在解析原始promise時解析的新promise。當承諾獲得解決時,不管是履行仍是拒絕,都會調用處理程序。

建立承諾部分

Promise對象使用所建立的new 關鍵字和它的構造。該構造函數將一個函數做爲其參數,稱爲「執行函數」。該函數應該將兩個函數做爲參數。resolve當異步任務成功完成時,將調用其中第一個函數(),並將任務結果做爲值返回。reject任務失敗時調用second(),並返回失敗緣由,一般是錯誤對象。

const myFirstPromise = new Promise((resolve, reject) => { // do something asynchronous which eventually calls either: // // resolve(someValue); // fulfilled // or // reject("failure reason"); // rejected });

要提供具備承諾功能的函數,只需讓它返回一個承諾:

function myAsyncFunction(url) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open("GET", url); xhr.onload = () => resolve(xhr.responseText); xhr.onerror = () => reject(xhr.statusText); xhr.send(); }); }
相關文章
相關標籤/搜索