Я использую обещания bluebird для приложения node.js (среда MEAN). Однако у меня возникают проблемы с пониманием обработки исключений/ошибок. Рассмотрим следующий код:
var Promise = require('bluebird'),
library1 = Promise.promisifyAll(require('firstlibrary')),
library2 = Promise.promisifyAll(require('secondlibrary'));
//main
exports.urlchecker = function(req, res) {
library1.doSomething(req.body.url) //--> how to reject this promise?
.then(function(response) {
if (response == false) {
throw new LinkError("URL invalid!");
}
library2.Foo(req.body.url)
.then(function(response2) {
if (response2 == false) {
throw new SizeError("URL too long!");
}
res.json({
status: true
});
}).catch(LinkError, function(e) { //--> causes error!
res.json({
status: false
});
}).catch(SizeError, function(e) { //--> causes error!
res.json({
status: false
});
}).catch(function(e) { //--> catch all other exceptions!
res.json({
status: false
});
});
});
};
library1
- обещал:
exports.doSomething = function(url, cb) {
if (whatever == 0) {
cb(null, false); //--> what to return to reject promise?
} else {
cb(null, true);
}
};
У меня сейчас два вопроса.
- Что я должен вернуть от
library1
, чтобы его обещание было отклонено? Если не путем возврата значения, как я могу это сделать? Как определить и перехватить собственные исключения? Приведенный выше код приводит к этой ошибке:
Unhandled rejection ReferenceError: LinkError/SizeError is not defined