【问题标题】:meteor methods functions return is not working流星方法函数返回不起作用
【发布时间】:2023-04-04 06:20:01
【问题描述】:

我正在尝试如果我的数据被删除然后显示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";
                    }
                }
            );
        }
    });

【问题讨论】:

  • 我的回答对您有帮助吗?

标签: javascript reactjs meteor ecmascript-6


【解决方案1】:

Meteor Mongo.Collection 不是原生 Mongo 集合,而是一个将原生 Mongo 调用集成到 Meteor 环境中的包装器。

见:https://docs.meteor.com/api/collections.html#Mongo-Collection

insert updateremove 方法具有特定的阻塞行为,除非您提供回调:

在服务器上,如果您不提供回调,则删除块,直到数据库确认写入,然后返回已删除文档的数量,或者如果出现问题则抛出异常。

如果您确实提供了回调,请立即删除返回。删除完成后,在失败的情况下使用单个错误参数调用回调,如果删除成功,则使用第二个参数指示已删除文档的数量。

https://docs.meteor.com/api/collections.html#Mongo-Collection-remove

由于阻塞类型调用自动抛出错误,理论上不需要显式处理异常:

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`
        }
    }
});

这永远不会向客户端返回错误,而是在服务器上记录错误。

【讨论】:

    猜你喜欢
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2015-09-13
    • 1970-01-01
    • 2017-02-15
    • 2015-05-31
    • 2018-07-27
    相关资源
    最近更新 更多