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實現,傳遞resolve
和reject
函數當即執行url
(在構造函數甚至返回建立的對象以前調用執行程序)。的和函數被調用時,解決或拒絕承諾,
分別。執行程序一般啓動一些異步工做,而後,一旦完成,要麼調用函數來解析promise ,要麼在發生錯誤
時拒絕它。若是執行程序函數中拋出錯誤,則拒絕承諾。執行程序的返回值將被忽略。
Promiseresolverejectresolve
A Promise
是建立promise時不必定知道的值的代理。它容許您將處理程序與異步操做的最終成功值或失敗緣由相關聯。這容許異步方法返回相似於同步方法的值:異步方法返回一個承諾,在未來的某個時刻提供值,而不是當即返回最終值。spa
A Promise
處於如下狀態之一:prototype
待處理的承諾能夠使用值來實現,也能夠使用緣由(錯誤)拒絕。當這些選項中的任何一個發生時,將then
調用由promise 方法排隊的關聯處理程序。(若是在附加相應的處理程序時已經履行或拒絕了promise,則將調用該處理程序,所以在異步操做完成和附加處理程序之間沒有競爭條件。)代理
因爲
和Promise.prototype.then()
方法返回承諾,它們能夠被連接。Promise.prototype.catch()
Promise.length
Promise.prototype
Promise
構造函數的原型。
Promise.all(iterable)
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.prototype.then(onFulfilled, onRejected)
onFulfilled
或
onRejected
不是函數),則返回其原始的已結算值 。
Promise.prototype.finally(onFinally)
甲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(); }); }