流星方法函数返回不起作用

时间:2019-03-08 05:51:34

标签: javascript reactjs meteor ecmascript-6

我正在尝试是否删除了我的数据,然后显示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 个答案:

答案 0 :(得分:1)

流星Mongo.Collection不是本地的Mongo集合,而是将本地Mongo调用集成到流星环境中的包装器。

请参阅: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`
        }
    }
});

这绝不会将错误返回给客户端,而是将错误记录在服务器上。