ES6规定,Promise对象是一个构造函数,用来生成Promise实例
首先了解一下Promise的基础,它有两个参数resolve、reject,也分别是执行成功和执行失败的回调函数,另外还有一个finally是必执行函数,这里就不多说了。
resolve函数的作用,将Promise对象的状态从“未完成”变成“成功”(即从Pending变为Resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject函数的作用是,在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去
finally函数,不管成功与否都会执行
var promise = new Promise(function(resolve,reject){
if(/* 异步操作成功 */){
resolve(value);
}else{
reject(error);
}
});
每一个promise都有then、catch方法,这就是它的强大之处。
那么直接实践,当我们逻辑需要,调用数据接口时出现依赖关系,则需要控制一下执行顺序防止报错,主要使用计时器来放大效果。
promiseTest(){
this.prms1().then((data)=>{
console.log('ps11',data)
return this.prms2()
}).then((data)=>{
console.log('ps22',data)
return this.prms3()
}).then((data)=>{
console.log('ps33',data)
})
},
prms1(){
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function () {
console.log('执行完成11');
resolve('脱裤子');//then成功的返回
}, 3000);
});
return p
},
prms2(){
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function () {
console.log('执行完成22');
resolve('蹲坑');//then成功的返回
}, 1000);
});
return p
},
prms3(){
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function () {
console.log('执行完成33');
resolve('穿裤子');//then成功的返回
}, 2000);
});
return p
},
//调用promiseTest
this.promiseTest()
//打印-----
//执行完成11
//脱裤子
//执行完成22
//蹲坑
//执行完成33
//穿裤子
如果不存在同步化,会按计时器2 3 1的进行输出,总不能先拉粑粑吧哈哈哈,当然你也可以擦一下屁股(狗头.jpg)
all的用法
promiseTest(){
.all([prms1(), prms2(), prms3()])
.then(function(data){
console.log(data);
});
}
this.promiseTest()
//打印-----
//执行完成11
//执行完成22
//执行完成33
//["脱裤子","蹲坑","穿裤子"]
在我们日常开发绝对是一大利器!!必须完全掌握。