Метеор Mongo.Collection
- это не нативная коллекция Монго, а обертка, которая интегрирует нативные вызовы Монго в среду Метеора.
См .: https://docs.meteor.com/api/collections.html#Mongo-Collection
insert
update
и remove
методы имеют специфическое поведение блокировки, если вы не предоставите обратный вызов:
На сервере, если вы не предоставите обратный вызов, удалите блоки, пока база данных не подтвердит запись, а затемвозвращает количество удаленных документов или выдает исключение, если что-то пошло не так.
Если вы предоставляете обратный вызов, удаление немедленно возвращается.После завершения удаления вызывается обратный вызов с одним аргументом ошибки в случае сбоя или вторым аргументом, указывающим количество удаленных документов, если удаление было успешным.
https://docs.meteor.com/api/collections.html#Mongo-Collection-remove
Поскольку вызов типа блокировки автоматически вызывает ошибку en, теоретически нет необходимости явно обрабатывать исключение:
Meteor.methods({
removeFAV: function(userID, product_id) {
const removedDocs = Favorites.remove(
{ user_id: userID, product_id: product_id },
{ multi: true });
// remove returns the number of docs being removed
return `removed [${removedDocs}] document(s) successfully`
}
});
Такой метод будет возвращать при обратном вызове Meteor.call
либо выброшенныйошибка в качестве первого параметра или результат в качестве второго.
Однако также имеет смысл обработать исключение и позволить методу сбоя молча:
Meteor.methods({
removeFAV: function(userID, product_id) {
let removedDocs = 0
try {
// remove returns the number of docs being removed
removedDocs = Favorites.remove(
{ user_id: userID, product_id: product_id },
{ multi: true });
} catch (e) {
// log error
myErrorLog.log(e)
} finally {
return `removed [${removedDocs}] document(s) successfully`
}
}
});
Это никогда не вернет ошибкуклиент, но регистрирует ошибку на сервере.