Promise提供了一种异步执行模式。
注意一点Promise的执行仍然是异步方式的,并没有改变成同步执行模式,只不过让代码写起来读起来像是同步执行一样。
在node.js中,回调函数的多重嵌套可能会导致代码难以维护。因此,我们借助Promise来封装异步函数,
使用统一的链式API来避免函数不断的嵌套匿名函数,脱离这多重回调的麻烦,使代码可读性更强。
简单来说,Promise就是把函数的嵌套改成了并列,使其代码更友好。
Promise对象一般有三种状态:Pending(未完成),Fulfilled(操作成功),Rejected(操作失败)
function pick(){
var p=new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('挑拣完成',new Date());
resolve();
},500);
});
return p;
}
function groundMouth(){
var p=new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('磨口完成',new Date());
resolve();
},400);
});
return p;
}
function blow(){
var p=new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('吹气完成',new Date());
resolve();
},300);
});
return p;
}
function PEbag(){
var p=new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('已套PE袋',new Date());
resolve();
},200);
});
return p;
}
function pack(){
var p=new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('装箱结束',new Date());
resolve();
},100);
});
return p;
}
pick()
.then(function(data){
return groundMouth();
})
.then(function(data){
return blow();
})
.then(function(data){
return PEbag();
})
.then(function(data){
return pack();
})