Promise 對象用于異步計算。一個 Promise 表示一個現(xiàn)在或?qū)砜捎茫嗷蛴肋h不可用的值。
語法
new Promise(
/* executor */
function(resolve, reject) {...}
);
executor
是一個帶有 resolve
和 reject
兩個參數(shù)的函數(shù) 。executor
函數(shù)由 Promise
的實現(xiàn)立即執(zhí)行,傳遞 resolve
和 reject
函數(shù)。
resolve
和 reject
函數(shù),當被調(diào)用時,分別解決或拒絕 promise
。
executor
通常會啟動一些異步工作,然后,一旦完成,可以調(diào)用 resolve
函數(shù)來解決 promise
,否則在發(fā)生錯誤時拒絕它。
如果在 executor
函數(shù)中拋出一個錯誤,那么該 promise
將被拒絕。executor
的返回值被忽略。
一個簡單的示例
var myFirstPromise = new Promise(function(resolve, reject) {
// 當異步代碼執(zhí)行成功時,我們才會調(diào)用 resolve(...), 當異步代碼失敗時就會調(diào)用 reject(...)
// 在本例中,我們使用 setTimeout(...) 來模擬異步代碼,實際編碼時可能是 XHR 請求或是 HTML5 的一些API 方法.
setTimeout(function(){
resolve("成功!"); // 代碼正常執(zhí)行!
// 或者調(diào)用 reject('失敗!')
}, 250);
});
myFirstPromise.then(
function(successMessage) {
// successMessage 的值是上面調(diào)用 resolve(...) 方法傳入的值.
// successMessage 參數(shù)不一定非要是字符串類型,這里只是舉個例子
console.log("Yay! " + successMessage);
}).catch(
// 記錄被拒絕的理由(異常信息)
function(reason) {
console.log('Handle rejected promise ('+reason+') here.');
});