1. 创建Promise
var myPromise = new Promise(function(resolve, reject){})
resolve : 执行成功调用方法
reject : 执行失败调用方法
2. 使用Promise
function testSuccess(data){
console.log(data);
}
function testError(data){
console.log(data);
}
function test(resolve,reject){
if(true){
resolve(1);
}else{
reject("错误");
}
}
var testPromise = new Promise(test);
testPromise.then(testSuccess).catch(testError);
new Promise() : 新建Promise
test : Promise处理过程,处理完成后,调用resolve或者reject方法
testPromise.then(testSuccess) : then中的testSuccess即为Promise中resolve方法
testPromise.catch(testError): catch中的testError即为Promise中reject方法
3. 多个Promise连环调用
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 可以实现Promise的连环调用。如:在一个ajax结束后再进行另外一个ajax。
4. 多个Promise同时调用,返回所有数据
var p1 = new Promise(function (resolve, reject) {
setTimeout(resolve, 500, 'P1');
});
var p2 = new Promise(function (resolve, reject) {
setTimeout(resolve, 600, 'P2');
});
// 同时执行p1和p2,并在它们都完成后执行then:
Promise.all([p1, p2]).then(function (results) {
console.log(results); // 获得一个Array: ['P1', 'P2']
});
可以同时执行多个Promise,在全部完成后调用resolve
5.多个Promise同时调用,返回最快resolve的数据
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'
});