Promise笔记
1.promise构造函数
Promise是一个构造函数,传参是一个function(resolve,reject),resolve是异步执行成功的回调,reject是异步执行失败的回调。
//构建promise函数如下
//例1
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
resolve('success');
}, 1000);
});
//例2
function executionFuc(){
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
resolve('success');
}, 1000);
return p;
});
}
注意!!!以上例子只是new了对象,却会直接执行。为了避免直接执行,如例2所示,一般将该对象放在一个函数内
2.then跟catch的用法
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
resolve('success');
}, 1000);
})
.then(function(data){
console.log('resolved');
console.log(data);
console.log(weisingyi); //weisingyi未定义
})
.catch(function(reason){
console.log('rejected');
console.log(reason);
});
.then用来接收成功后的回调,对应resolve;
.then本身能接受两个参数,一个对应成功处理,一个对应失败处理,在执行resolve的回调时,如果代码出错,就会卡死不进入失败处理,所以建议使用.catch
.catch用来接收失败后的回调,对应reject;
3.all的用法
Promise
.all([promise1(), promise2()])
.then(function(datas){
console.log(datas);
});
all方法传入数组参数,作用是多个异步并行执行,并且在所有异步操作执行完后才执行回调。返回的datas也将是一个数组,分别对应多个异步的返回数据。
4.race的用法
Promise
.race([promise1(), promise2()])
.then(function(datas){
console.log(datas);
});
race与all相同,都是多个异步并行执行,但是race只返回第一个执行完的结果,后续其余异步将不再返回。例如用于超时跳出功能。