2017-11-22 1 views
1

Ich habe eine Methode findByIdAndRemove auf einem MongoDB aufrufen. Falls ich die ID nicht finden kann und sie deshalb nicht aus der Datenbank löschen kann, möchte ich einen Fehler ausgeben.Knoten Promise Ablehnung nicht fangen

löschen Armaturenbrett Funktion:

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); 
    }); 
}; 

Funktionsaufruf:

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

Ich verstehe nicht, warum dashboardService.deleteDashboard mit einem id-Aufruf, die nicht in der Datenbank enthalten ist, nicht in den Fang . Beim Debugging habe ich überprüft, dass der if(dashboard === null) Zustand eintritt und somit Promise.reject() aufruft, aber dann tritt der then statt der catch ein.

+0

Verwenden Sie 'throw' anstelle von' reject', funktioniert in den meisten Fällen – wrangler

Antwort

1

denke ich, ist das Problem hier:

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

Normalerweise, wenn Sie versprechen, verwenden Sie keinen Rückruf übergeben. Versuchen Sie, es zu ändern

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); 
    }) 
}; 

Ich habe versucht, die meisten den Code zu behalten, wie es ist. Habe gerade den Callback für ein Versprechen geändert, und den Fehler für einen Haken.

Verwandte Themen