# 異步與 try catch ## try catch 與 throw Error ```javascript= try { throw new Error('哀呀我錯了抱歉') console.log('hello') } catch (error) { console.log(error) } ``` :::info try catch 目的是為了要攔截錯誤以利後續程式碼繼續執行(繼續實作我們的業務邏輯) ::: ## 最怕的是 callback hell ```javascript= getUserIsLogin({name: 'jung', pwd: 123}).then((resp)=> { console.log(resp) getUserInfo(123).then((respUserInfo)=> { console(respUserInfo) //.... }).catch((error)=> { console(error) }) }).catch((error)=> { console(error) }) ``` :::info 除了程式不好閱讀外,錯誤的內容也不容易被查找,而且有很強烈的依賴關係 ::: ## 實際演練 ```javascript= function getUserIsLogin ({name, pwd}) { return new Promise((resovle, reject)=> { setTimeout(()=> { if(name === 'jung' && pwd === 123) { console.log('我知道我登入成功了 太棒了ㄎㄎ!') resovle(true) } else { console.log('哀呀呀失敗!') reject(false) } },1000) }) } function getUserInfo (token) { return new Promise((resovle, reject)=> { setTimeout(()=> { if(token === 123) { console.log('成功獲取使用者資訊') resovle('你是 Jung') } else { reject('已過期! 請您重新登入^_^!') } },1000) }) } // let {isLogin = false} = await getUserIsLogin(123).then((resp)=> { // console.log(resp) // return resp // }).catch(()=> { // return false // }) let isLogin = false let resp = await getUserIsLogin({name: 'jung', pwd: 123}) if (!resp) return isLogin = resp console.log(resp) await getUserInfo(123).then((respUserInfo)=>{ console.log(respUserInfo) }) console.log('hi') console.log(isLogin) ``` :::info 當今天有依賴的時候,可以透過異步的方式降低程式碼的依賴,也更好閱讀,透過early return 處理結果。 ::: #### 下次說 宏任務 marco task 微任務 micro task ###### tags: ‵好學,好 Share !`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up