情境
route main內執行 child()
child為非同步
非同步的child function可以是
1.以async宣告
const asyncFun = async(res) => {
await sleep(2000)
const result = JSON.parse(body)
return result
}
2.以Promise宣告
const promiseFun = (res) => {
return new Promise((resolve, reject) => {
try {
const result = JSON.parse(body)
resolve(result)
} catch (e) {
reject(e)
}
})
}
如果child function內沒有使用try catch包裹
發生錯誤就會是往呼叫端(main)的catch丟
如果呼叫端(main)也沒有用try catch或是asyc 的catch攔截
錯誤就會往外 讓express的錯誤處理接收到
有一個特別的例外是當child內有使用setTimeout把執行的工作包裝起來
那麼當發生錯誤時
若在child內寫try catch是可以攔截到 但卻無法把錯誤往呼叫端丟
唯一可行的是child是使用promise寫 就可以在try catch攔截到錯誤
時呼叫reject回傳給呼叫端的catch
儘可能不要在child內直接處理res回應
否則當child發生錯誤 res回應的部份不被執行
可能造成系統掛掉
沒有留言:
張貼留言