Promise 的含义
Promise 是异步编程的一种解决方案,比传统的解决方案–回调函数和事件--更合理和更强大。它由社区最早提出和实现,ES6将其写进了语言标准,统一了语法,原生提供了Promise
所谓Promise ,简单说就是一个容器,里面保存着某个未来才回结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。
Promise 对象的状态不受外界影响
三种状态:
pending:进行中
fulfilled :已经成功
rejected 已经失败
状态改变:
Promise对象的状态改变,只有两种可能:
从pending变为fulfilled
从pending变为rejected。
这两种情况只要发生,状态就凝固了,不会再变了,这时就称为resolved(已定型)
Promise还可以做更多的事情,比如,有若干个异步任务,需要先做任务1,如果成功后再做任务2,任何任务失败则不再继续并执行错误处理函数。要串行执行这样的异步任务,不用Promise需要写一层一层的嵌套代码。有了Promise,我们只需要简单地写:
job1.then(job2).then(job3).catch(handleError);
更多实例,见:http://jstest.6feel.com/demo/40/
实例1:
new Promise(function(r,j){
setTimeout(function(){r("你好")},1000); //定义后,里面开始倒计时1秒,调用下个then,传入参数"你好"
})
.then((value=>{console.log(value);//打印出"你好"
return new Promise(function(r,j){
setTimeout(function(){r("你不好1")},1000)//定义后,里面开始倒计时1秒,调用下个then,传入参数"你好"
})
}))
.then((value=>{console.log(value);//打印出"你好"
return new Promise(function(r,j){
setTimeout(function(){r("你不好2")},1000)//定义后,里面开始倒计时1秒,调用下个then,传入参数"你好"
})
}))
.then((value=>{console.log(value);//打印出"你好"
return new Promise(function(r,j){
setTimeout(function(){r("你不好3")},1000)//定义后,里面开始倒计时1秒,调用下个then,传入参数"你好"
})
}))
.then((value=>{console.log(value);//打印出"你好"
return new Promise(function(r,j){
setTimeout(function(){r("你不好4")},1000)//定义后,里面开始倒计时1秒,调用下个then,传入参数"你好"
})
}))
.then((value=>{console.log(value)}))//打印出"你好"
//输入以下内容:
//你好
//你不好1
//你不好2
//你不好3
//你不好4
实例二
new Promise(function(r,j){
setTimeout(function(){r("你好")},1000);
})
.then((value=>{
console.log(value);
}))
.then((value=>{
console.log(1);
}))
.then((value=>{
console.log(2);
}))
.then((value=>{
console.log(3);
}))
//输出:
//你好
//1
//2
//3
实例3
new Promise(function(r,j){
r(1)
})
.then((value=>{
console.log(value);
return value+1
}))
.then((value=>{
console.log(value);
return value+1;
}))
.then((value=>{
console.log(3);
return value+1
}))
//输出:
//1
//2
//3
网友评论