Я не понимаю, почему я получаюPromise.method() выбрасывает необработанное отклонение - почему?
Unhandled rejection HttpError
at null.<anonymous> (/home/makolb/devel/n4v_newsletter/app/controls/publishercontrol.js:31:23)
at tryCatcher (/home/makolb/devel/n4v_newsletter/node_modules/sequelize/node_modules/bluebird/js/main/util.js:26:23) [...]
, который строку с броском новой HttpError (409); в моем коде:
var PublisherControl = {
newPublisher: Promise.method(function (email, req) {
models.Publisher.findOne({where: {email: email}}).then(function (publisher) {
if (publisher !== undefined) {
throw new HttpError(409);
}
}).then(function() {
var password = Password.generate(12);
models.Publisher.create({email: email, password: Password.hashPassword(password)}).then(function (publisher) {
i_need_this_then_because_i_do_here_something();
how_do_i_return_a_promise_if_return_publisher_is_not_enough();
return publisher;
});
}).catch(function (err) {
if (!(err instanceof HttpError)) {
console.error('catched error: ' + err);
throw new HttpError(500);
} else {
throw err;
}
});
})
};
Мой мокко тест выглядит следующим образом:
describe.only('#newPublisher', function() {
it('should create new publisher', function (done) {
var Control = require('../../../app/controls/publishercontrol');
Control.newPublisher('[email protected]').then(function (publisher) {
should.exist(publisher);
should.exist(publisher.email);
publisher.email.should.eql('[email protected]');
publisher.destroy();
done();
}).catch(HttpError, function (status) {
should.not.exist(status);
done();
}).catch(done);
});
});
Так уточнить, я знаю, почему издатель не определено. Мой вопрос указывает на часть синей птицы. Я хотел бы использовать этот метод в качестве обещания и поймать HttpErrors на этом обещании. Не должно ли это работать с Promise.method (...)? Можете ли вы это объяснить?
Ok. Я обновил свой код выше ... Это имеет смысл, что вы говорите. Но как мне вернуть обещание, если я буду использовать его уже с помощью ... create(). Then (...) - могу ли я вернуть тогда как обещание? – Markus
Вы можете мутировать 'издателя', однако вы хотите в этой функции, а затем вернуть его. Он был удален в моем примере, поскольку он выглядел как функция идентификации, которая ничего не делала, однако ее можно повторно добавить, если вам нужно продолжить обработку «издателя» после создания. – dherman