1. 創(chuàng)建Promise
var myPromise = new Promise(function(resolve, reject){})
resolve
: 執(zhí)行成功調(diào)用方法
reject
: 執(zhí)行失敗調(diào)用方法
2. 使用Promise
function testSuccess(data){
console.log(data);
}
function testError(data){
console.log(data);
}
function test(resolve,reject){
if(true){
resolve(1);
}else{
reject("錯(cuò)誤");
}
}
var testPromise = new Promise(test);
testPromise.then(testSuccess).catch(testError);
new Promise()
: 新建Promise
test
: Promise
處理過程典尾,處理完成后,調(diào)用resolve
或者reject
方法
testPromise.then(testSuccess)
: then
中的testSuccess
即為Promise
中resolve
方法
testPromise.catch(testError)
: catch
中的testError
即為Promise
中reject
方法
3. 多個(gè)Promise
連環(huán)調(diào)用
function anotherPromise(val){
return new Promise(function(resolve,reject){
resolve(++val);
})
}
var testPromise = new Promise(test);
testPromise.then(anotherPromise).then(anotherPromise).then(testSuccess).catch(testError);
通過返回Promise
可以實(shí)現(xiàn)Promise
的連環(huán)調(diào)用。如:在一個(gè)ajax
結(jié)束后再進(jìn)行另外一個(gè)ajax
读拆。
4. 多個(gè)Promise
同時(shí)調(diào)用琐驴,返回所有數(shù)據(jù)
var p1 = new Promise(function (resolve, reject) {
setTimeout(resolve, 500, 'P1');
});
var p2 = new Promise(function (resolve, reject) {
setTimeout(resolve, 600, 'P2');
});
// 同時(shí)執(zhí)行p1和p2,并在它們都完成后執(zhí)行then:
Promise.all([p1, p2]).then(function (results) {
console.log(results); // 獲得一個(gè)Array: ['P1', 'P2']
});
可以同時(shí)執(zhí)行多個(gè)Promise
滑绒,在全部完成后調(diào)用resolve
5.多個(gè)Promise
同時(shí)調(diào)用权她,返回最快resolve
的數(shù)據(jù)
var p1 = new Promise(function (resolve, reject) {
setTimeout(resolve, 500, 'P1');
});
var p2 = new Promise(function (resolve, reject) {
setTimeout(resolve, 600, 'P2');
});
Promise.race([p1, p2]).then(function (result) {
console.log(result); // 'P1'
});