promise.then(onFulfilled, onRejected);
then 代碼示例
var promise = new Promise(function(resolve, reject){
resolve("傳遞給then的值");
});
promise.then(function (value) {
console.log(value);
}, function (error) {
console.error(error);
});
這段代碼創(chuàng)建一個(gè) promise 對(duì)象,定義了處理 onFulfilled 和 onRejected 的函數(shù)(handler),然后返回這個(gè) promise 對(duì)象。
這個(gè) promise 對(duì)象會(huì)在變?yōu)?resolve 或者 reject 的時(shí)候分別調(diào)用相應(yīng)注冊(cè)的回調(diào)函數(shù)。
當(dāng) handler 返回一個(gè)正常值的時(shí)候,這個(gè)值會(huì)傳遞給 promise 對(duì)象的 onFulfilled 方法。
promise.catch(onRejected);
catch 代碼示例
var promise = new Promise(function(resolve, reject){
resolve("傳遞給then的值");
});
promise.then(function (value) {
console.log(value);
}).catch(function (error) {
console.error(error);
});
這是一個(gè)等價(jià)于 promise.then(undefined, onRejected) 的語法糖。
Promise.resolve(promise);
Promise.resolve(thenable);
Promise.resolve(object);
Promise.resolve代碼示例
var taskName = "task 1"
asyncTask(taskName).then(function (value) {
console.log(value);
}).catch(function (error) {
console.error(error);
});
function asyncTask(name){
return Promise.resolve(name).then(function(value){
return "Done! "+ value;
});
}
根據(jù)接收到的參數(shù)不同,返回不同的 promise 對(duì)象。
雖然每種情況都會(huì)返回 promise 對(duì)象,但是大體來說主要分為下面3類。
接收到 promise 對(duì)象參數(shù)的時(shí)候
返回的還是接收到的 promise 對(duì)象
接收到 thenable 類型的對(duì)象的時(shí)候
返回一個(gè)新的 promise 對(duì)象,這個(gè)對(duì)象具有一個(gè) then 方法
接收的參數(shù)為其他類型的時(shí)候(包括 JavaScript 對(duì)或 null 等)
返回一個(gè)將該對(duì)象作為值的新 promise 對(duì)象
Promise.reject(object)
Promise.reject 代碼示例
var failureStub = sinon.stub(xhr, "request").returns(Promise.reject(new Error("bad!")));
返回一個(gè)使用接收到的值進(jìn)行了 reject 的新的 promise 對(duì)象。
而傳給 Promise.reject 的值也應(yīng)該是一個(gè) Error 類型的對(duì)象。
另外,和 Promise.resolve 不同的是,即使 Promise.reject 接收到的參數(shù)是一個(gè) promise 對(duì)象,該函數(shù)也還是會(huì)返回一個(gè)全新的 promise 對(duì)象。
var r = Promise.reject(new Error("error"));
console.log(r === Promise.reject(r));// false
Promise.all(promiseArray);
Promise.all代碼示例
var p1 = Promise.resolve(1),
p2 = Promise.resolve(2),
p3 = Promise.resolve(3);
Promise.all([p1, p2, p3]).then(function (results) {
console.log(results); // [1, 2, 3]
});
生成并返回一個(gè)新的 promise 對(duì)象。
參數(shù)傳遞 promise 數(shù)組中所有的 promise 對(duì)象都變?yōu)?resolve 的時(shí)候,該方法才會(huì)返回, 新創(chuàng)建的 promise 則會(huì)使用這些 promise 的值。
如果參數(shù)中的任何一個(gè) promise 為 reject 的話,則整個(gè) Promise.all 調(diào)用會(huì)立即終止,并返回一個(gè) reject 的新的 promise 對(duì)象。
由于參數(shù)數(shù)組中的每個(gè)元素都是由 Promise.resolve 包裝(wrap)的,所以Paomise.all可以處理不同類型的promose對(duì)象。
Promise.race(promiseArray);
Promise.race代碼示例
var p1 = Promise.resolve(1),
p2 = Promise.resolve(2),
p3 = Promise.resolve(3);
Promise.race([p1, p2, p3]).then(function (value) {
console.log(value); // 1
});
生成并返回一個(gè)新的 promise 對(duì)象。
參數(shù) promise 數(shù)組中的任何一個(gè) promise 對(duì)象如果變?yōu)?resolve 或者 reject 的話, 該函數(shù)就會(huì)返回,并使用這個(gè) promise 對(duì)象的值進(jìn)行 resolve 或者 reject。