Я использую библиотеку обещаний kriskowal Q в приложении узла. У меня есть код, который читает файл, а затем пытается проанализировать его часть в объект Date Javascript (у меня есть аналогичный код в других местах, где вы пытаетесь выполнить JSON.parse). В этих обстоятельствах я читал и лично считаю, что лучше всего использовать этот код в блоке try/catch, чтобы избежать и, возможно, фатальных сюрпризов. Вот некоторые реальный код смешивается с кодом псевдо:Q Отклонить обещание в пределах. Then callback
var getMonitorTimestamp = function() {
return readLogFile()
.then(
function ok(contents) {
//regex to capture dates in format of: 09 Jan 2015 09:42:01
var regex = /[0-9]{2} [\w]{3} [0-9]{4} ([0-9]{2}:){2}[0-9]{2}/g;
var timestamp = contents.match(regex)[0];
var date;
try {
date = new Date(timestamp);
return date;
}
//when I've caught the error here, how do I reject the promise?
//this will still return an error to the next success callback in the queue
catch(e) {
console.error(e);
return e;
}
},
function err(e) {
console.error(e);
return new Error();
}
);
};
exports.sendRes = function(req, res) {
getMonitorTimestamp()
.then(
function yay(data) {
//don't want to send an error here
res.json({result: data});
},
function boo(e) {
res.status(500).json({error: e});
}
);
}
Как вы можете видеть, это было бы полезно, чтобы отклонить обещание в getMonitorTimstamp-> ОК обратного вызова, потому что это не удалось.
Есть ли способ сделать это в Q? Я ничего не нашел (пока). Или есть другой шаблон для обработки этого сценария?
Хотя в реальной жизни никогда не бросайте струны: D –
Виновен: P хотел сохранить пример как можно меньше! – Interrobang