2017-11-22 2 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); 
    }) 
}; 

나는 그대로 대부분의 코드를 유지하려고했습니다. 그냥 promise에 대한 콜백을 변경하고 catch에 대한 오류 처리를 변경했습니다.

관련 문제