Promise.resolve 方法,Promise.reject 方法,Promise.catch 方法

Promise.resolve 方法,Promise.reject 方法

有時需要將現有對象轉爲Promise對象,Promise.resolve方法就起到這個作用。

var jsPromise = Promise.resolve($.ajax('/whatever.json'));

上面代碼將 jQuery 生成 deferred 對象,轉爲一個新的 ES6 的 Promise 對象。

如果 Promise.resolve 方法的參數,不是具有 then 方法的對象(又稱 thenable 對象),則返回一個新的 Promise 對象,且它的狀態爲fulfilled。

var p = Promise.resolve('Hello'); 
p.then(function (s){ 
    console.log(s) 
}); 
// Hello

上面代碼生成一個新的Promise對象的實例p,它的狀態爲fulfilled,所以回調函數會立即執行,Promise.resolve方法的參數就是回調函數的參數。

如果Promise.resolve方法的參數是一個Promise對象的實例,則會被原封不動地返回。

Promise.reject(reason)方法也會返回一個新的Promise實例,該實例的狀態爲rejected。Promise.reject方法的參數reason,會被傳遞給實例的回調函數。

var p = Promise.reject('出錯了'); 
p.then(null, function (s){ 
    console.log(s) 
}); 
// 出錯了

上面代碼生成一個Promise對象的實例,狀態爲rejected,回調函數會立即執行。

Promise.prototype.catch方法:捕捉錯誤

Promise.prototype.catch 方法是 Promise.prototype.then(null, rejection) 的別名,用於指定發生錯誤時的回調函數。

getJSON("/posts.json").then(function(posts) { 
    // some code 
}).catch(function(error) { 
    // 處理前一個回調函數運行時發生的錯誤 
    console.log('發生錯誤!', error); 
});

Promise 對象的錯誤具有"冒泡"性質,會一直向後傳遞,直到被捕獲爲止。也就是說,錯誤總是會被下一個 catch 語句捕獲。

getJSON("/post/1.json").then(function(post) { 
    return getJSON(post.commentURL); 
}).then(function(comments) { 
    // some code 
}).catch(function(error) { 
    // 處理前兩個回調函數的錯誤 
});
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章