2017-11-22 6 views
1

mongoDBでfindByIdAndRemoveを呼び出すメソッドがあります。 IDを見つけられず、DBから削除できない場合は、エラーを投げたい。ノードプロミス拒否がキャッチを入力しない

削除ダッシュボード機能:

deleteDashboard = (id) => { 
    return Dashboard.findByIdAndRemove(id).exec((err, dashboard) => { 
    if (err) return errorHandler.handle('dashboardService', err); 
    if (dashboard === null) return Promise.reject({ status: 404, message: 'not found' }); 

    return Promise.resolve(dashboard); 
    }); 
}; 

ファンクションコール:データベースに存在しないidを持つdashboardService.deleteDashboardを呼び出して、なぜ私は理解していない

return dashboardService.deleteDashboard(id) 
    .then(dashboard => res.status(200).json(dashboard)) 
    .catch(error => res.status(error.status).json(error)); 

、キャッチを入力していません。デバッグ中にif(dashboard === null)の状態になり、Promise.reject()が呼び出されたが、catchの代わりにthenと入力されていることを確認した。

+0

'reject'の代わりに' throw'を使うと、ほとんどの場合動作します – wrangler

答えて

1

私はこの問題はここにあると思う:あなたが約束を使用する場合

return Dashboard.findByIdAndRemove(id).exec((err, dashboard) => { 

通常は、コールバックを渡しません。それを変更してみてください

deleteDashboard = (id) => { 
    return Dashboard.findByIdAndRemove(id).exec() 
    .then(dashboard => { 
    if (dashboard === null) return Promise.reject({ status: 404, message: 'not found' }); 
    return dashboard; 
    }) 
    .catch(err => { 
    return errorHandler.handle('dashboardService', err); 
    }) 
}; 

ほとんどのコードをそのまま保存しようとしました。約束のためにコールバックを変更し、catchのエラーハンドルを変更しました。

関連する問題