возврат из метеорологических методов не работает - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь удалить мои данные, затем показать return "removed successfully";, но это не работает и не удаляет данные. Если я не использую функцию, то данные удаляются, но не получают никакого результата возврата, обратный вызов

Работает

  Meteor.methods({
        removeFAV: function(userID, product_id) {
            Favorites.remove(
                { user_id: userID, product_id: product_id },
                { multi: true }
            );
        }
    });

Не работает

Meteor.methods({
        removeFAV: function(userID, product_id) {
           Favorites.remove(
                ({ user_id: userID, product_id: product_id }, { multi: true }),
                function(err) {
                    if (err) {
                        return err;
                    } else {
                        return "removed successfully";
                    }
                }
            );
        }
    });

1 Ответ

1 голос
/ 08 марта 2019

Метеор 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`
        }
    }
});

Это никогда не вернет ошибкуклиент, но регистрирует ошибку на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...