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 對象,定義了處理 onFulfilled 和 onRejected 的函數(shù)(handler),然后返回這個(gè) promise 對象。
這個(gè) promise 對象會在變?yōu)?resolve 或者 reject 的時(shí)候分別調(diào)用相應(yīng)注冊的回調(diào)函數(shù)。
當(dāng) handler 返回一個(gè)正常值的時(shí)候,這個(gè)值會傳遞給 promise 對象的 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 對象。
雖然每種情況都會返回 promise 對象,但是大體來說主要分為下面3類。
接收到 promise 對象參數(shù)的時(shí)候
返回的還是接收到的 promise 對象
接收到 thenable 類型的對象的時(shí)候
返回一個(gè)新的 promise 對象,這個(gè)對象具有一個(gè) then 方法
接收的參數(shù)為其他類型的時(shí)候(包括 JavaScript 對或 null 等)
返回一個(gè)將該對象作為值的新 promise 對象
Promise.reject(object)
Promise.reject 代碼示例
var failureStub = sinon.stub(xhr, "request").returns(Promise.reject(new Error("bad!")));
返回一個(gè)使用接收到的值進(jìn)行了 reject 的新的 promise 對象。
而傳給 Promise.reject 的值也應(yīng)該是一個(gè) Error 類型的對象。
另外,和 Promise.resolve 不同的是,即使 Promise.reject 接收到的參數(shù)是一個(gè) promise 對象,該函數(shù)也還是會返回一個(gè)全新的 promise 對象。
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 對象。
參數(shù)傳遞 promise 數(shù)組中所有的 promise 對象都變?yōu)?resolve 的時(shí)候,該方法才會返回, 新創(chuàng)建的 promise 則會使用這些 promise 的值。
如果參數(shù)中的任何一個(gè) promise 為 reject 的話,則整個(gè) Promise.all 調(diào)用會立即終止,并返回一個(gè) reject 的新的 promise 對象。
由于參數(shù)數(shù)組中的每個(gè)元素都是由 Promise.resolve 包裝(wrap)的,所以Paomise.all可以處理不同類型的promose對象。
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 對象。
參數(shù) promise 數(shù)組中的任何一個(gè) promise 對象如果變?yōu)?resolve 或者 reject 的話, 該函數(shù)就會返回,并使用這個(gè) promise 對象的值進(jìn)行 resolve 或者 reject。