看起來你所遇到的是同步代碼,承諾和異步回調的混合體,它們具有不同的錯誤處理技術。
一個解決方案是隻做你正在做的事情,單獨處理不同類型的錯誤,但這會變得混亂和複雜。另一種是試圖將所有這些代碼統一成一種風格,使用簡單的抽象來平滑它們。
我會親自嘗試將所有呼叫標準化爲異步回調樣式調用,然後統一錯誤處理方式。例如,它看起來像是在這裏使用express
中間件,所以我會將所有錯誤傳出並在錯誤處理中間件中處理它們。
import { auto, constant } from 'async'
const { assign } from Object
function sanitize (opts, callback) {
const { input } = opts
try {
sanitizeInput(input)
callback()
} catch (err) {
callback(assign(err, { status: 'sanitize_error', statusCode: 500 })
}
}
function createRow (opts, callback) {
const { santizie: input } = opts
dbCreateRowPromise(input)
.then(result => callback(null, result))
.catch(err => callback(assign(err, { status: 'create_row_error', statusCode: 500 }))
}
function my_function(req, res, input, next) {
const block = {
input: constant(input),
sanitize: ['input', sanitize],
createRow: ['sanitize', createRow]
}
auto(block, (err, result) => {
if (err) return next(err)
res.status(200).json({ status: 'ok' }))
})
}
function errorHandler(err, req, res) {
res.status(err.statusCode).json(err)
}
這些類型的問題不提供** **問題。這屬於[代碼評論](https://codereview.stackexchange.com/)。 – ProEvilz
@ProEvilz我不這麼認爲,代碼審查需要運行代碼,僞代碼並不真的讓他們感興趣。 – Icepickle
@Ippickle這個問題是'我該如何改進我的代碼'的問題。不要緊,無論是在這種情況下,因爲僞高亮部分是使用捕捉的&try塊。 – ProEvilz