Я работаю над сервером node js и использую bluebird для реализации обещаний. Я понимаю, как использовать промисы, но моя проблема заключается в том, что делать с ошибкой, возвращаемой из промиса. Я попробовал простое решение - просто снова выдал ошибку, но bluebird ее поймал, и клиент так и не получил ответа. Ниже приведен демонстрационный код, чтобы проиллюстрировать мой вопрос:
var restify = require('restify');
var Promise = require('bluebird');
var server = restify.createServer({
name: 'myapp',
version: '1.0.0'
});
server.get('/', function (req, res, next) {
new Promise(function(resolve, reject){
reject(new Error());
}).then(function(res){
res.send('hello');
}).catch(function(e){
throw e;
});
});
server.on('uncaughtException', function (req, res, route, error) {
console.log('error');
});
server.listen(7070, function () {
console.log('%s listening at %s', server.name, server.url);
});
Я ищу способ каким-то образом передать ошибку для восстановления, чтобы она вызвала событие uncaughtException
, и я мог бы обработать его, как любое другое необработанное исключение. После небольшого поиска я обнаружил, что могу просто сделать что-то вроде next(new InternalServerError())
, и restify вызовет событие для этой конкретной ошибки, но мне это кажется немного странным, поэтому я ищу лучший способ.