传统实现异步操作就是采用回调函数,回调函数方式本身没有什么问题,但是在多重回调层层嵌套的情况下,那么代码的可阅读性就会出现问题。
Promise对象是一个新的异步操作解决方案,比原有的回调函数等方式更为合理
Promise对象具有三种状态:Pending(等待)、Resolved(已完成)和Rejected(未完成)。
Promise对象状态的改变只有两种可能:Pending转变为Resolved或者Pending转变为Rejected。
step1().then(step2).then(step3).then(step4).catch(function(err){
// do something when err
});
例:
let param; //传递参数载体
function p1() {
return new Promise(function(resolve, reject) {
setTimeout(function () {
console.log("aaaaa");
//resolve(123);
param='第1';
reject(123);
},3000);
});
}
function p2() {
return new Promise(function(resolve, reject) {
setTimeout(function () {
console.log("bbbbb");
param='第2';
resolve(456); //继续向下
//reject(456); //截停
},2000);
});
}
function p3() {
return new Promise(function(resolve, reject) {
setTimeout(function () {
console.log("cccccc");
console.log('传来:'+param);
param='第3';
resolve(789);
},1000);
});
}
function p4() {
return new Promise(function(resolve, reject) {
setTimeout(function () {
console.log("dddddd");
console.log('传来:'+param);
resolve('结束');
},1000);
});
}
p1().then(p2).then(p3)
.then(function(data) {
console.log('data: ' + data);
})
.catch(function(error) {
console.log('end,error: ' + error);
if(error==123){ //如果第1步出错
p3().then(p4);
}else if(err==456){
p4();
}
});
es6 Promise
最新推荐文章于 2024-10-15 15:44:22 发布