Метеор не выдает ошибку, а вылетает
Я хочу реализовать обработку ошибок в моем приложении, но когда я выкидываю Meteor.Error, мой сервер падает. Это может быть потому, что я использую будущее, чтобы дождаться результата. Как я могу получить это работает?
Meteor.methods({
'/app/pdf/download': function (url, name) {
check(url, String);
check(name, Match.Any);
if ( ! name) {
name = url.split('/').pop();
} else {
name += '.pdf';
}
var Future = Meteor.npmRequire('fibers/future');
var Download = Meteor.npmRequire('download');
var future = new Future();
var download = new Download({ extract: true, strip: 1 })
.get(url)
.dest(process.env.PWD + '/staticFiles')
.rename(name);
// Run download
download.run(function (err, files, stream) {
if (err) {
throw new Meteor.Error(500, 'Couldn\'t download file');
}
future.return(name);
});
return future.wait();
}
});
1 ответ
Решение
Да, это потому, что вы бросаете его в другой стек вызовов.
Вы можете попробовать:
var error;
download.run(function (err, files, stream) {
if (err) {
error = err;
}
future.return(name);
});
var result = future.wait();
if (error)
throw new Meteor.Error(500, 'Couldn\'t download file');
return result;
В любом случае я рекомендую использовать Meteor.wrapAsync для ваших целей.
var sync = Meteor.wrapAsync(function (done) {
download.run(function (err, files, stream) {
if (err) {
done(new Meteor.Error(500, 'Couldn\'t download file'));
}
else {
done(err, name);
}
});
};
return sync();
Если вы используете Meteor < 1.0, его Meteor._wrapAsync()
,