天天看點

Promise對象、傳參以及錯誤處理

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

複制