在大部分情况下我们的程序都是在进行异步操作,需要嵌套多次callback,使得程序变得复杂!ES6中提供了Promise对象,将非阻塞I/O变为阻塞I/O,把异步变同步解决一些异步问题!
我们使用promise,返回一个状态后,使用then执行下一步方法
如何使用Promise?
使用Promise
<script>
console.log("开始执行")
let p = new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log("执行中...")
resolve()
},2000)
})
p.then(()=>{
console.log("执行结束")
})
</script>
复制
new 一个Promise对象,传入参数resolve,和reject,resolve表示成功执行反馈结果,reject表示未成功执行!
传参
我们可以在resolve中定义实参,在then方法后接收到
console.log("开始执行")
let p = new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log("执行中...")
resolve(6)
},2000)
})
p.then((timer)=>{
console.log(timer+"s执行结束")
})
复制
错误处理
我们如何传递错误的promise呢?我们可以将状态修改为reject,表示错误执行未成功,再次可以传递实参到then方法的第二个参数执行时候接收这个错误抛出传递的信息!
<script>
console.log("开始执行")
let p = new Promise((resolve,reject)=>{
let a = 0;
setTimeout(()=>{
if(a===true){
console.log("执行中...")
resolve()
}else{
console.log("任务执行失败")
reject("404 NOT");
}
},2000)
})
p.then(()=>{
console.log("执行结束")
},(err)=>{
console.log("执行失败,重新尝试"+err)
})
</script>
复制