2017-05-25 167 views
0

我遇到了express和promisses中的錯誤問題。承諾中的快速錯誤處理

我想要最好的方式來處理錯誤,創建一個標準的方式來做到這一點在我的應用程序。

不過,我在面前的問題:

validate(req.body) 
.catch(e => next(new APIError(400, e))) 
.then(validatedbody => searchdatabase(validatedbody)) 
.then(dbResult => validate(dbResult)) 
.catch(e => next(new APIError(500, e))) 
// results from db should always be valid 
.then(validatedDbResult => res.json(validatedDbResult)) 

如果身體是錯誤的,我們應該停止併發送錯誤,錯誤將使用錯誤處理中間件發送,但是被測件承諾如何工作,它也將繼續下一步(在數據庫中搜索)。

我該怎麼辦? 我是否正確地處理錯誤?

非常感謝你, Giltho

+0

命名參數?我認爲這不會奏效。 – Bergi

+0

是的,糾正它,這是一個例子,它不是我的實際代碼 – Giltho

回答

1

只是重新拋出的錯誤,只有手柄它在鏈的最末端:在`APIError`

validate(req.body) 
.catch(e => { throw new APIError(400, e); }) 
.then(validatedbody => 
    searchdatabase(validatedbody) 
    .then(validate) 
    .catch(e => { throw new APIError(500, e); }) 
) 
.then(validatedDbResult => res.json(validatedDbResult), 
     next) 
+0

如果我重新拋出錯誤,它的狀態會改變第二次拋出使用你的代碼,不是嗎? – Giltho

+0

@Giltho不,這就是爲什麼我嵌套第二個'catch'只接收來自'searchdatabase'和'validate'的拒絕:-) – Bergi

+0

哦,它的嵌套沒有看到,那麼我想這將工作謝謝! – Giltho