在大部分情況下我們的程式都是在進行異步操作,需要嵌套多次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>
複制