【问题标题】:How to check Collections.insert() is Successfully Inserted or not in Meteor?如何检查 Collections.insert() 是否在 Meteor 中成功插入?
【发布时间】:2026-02-15 11:25:01
【问题描述】:

如何检查(用户创建的集合) Collections.insert() 是否成功插入Meteor JS?。例如,我正在使用客户端集合插入详细信息,如下所示:

Client.insert({ name: "xyz", userid: "1", care:"health" });

如何知道上面的插入查询是否插入成功?因为下面的问题

 If the form details are successfully inserted  - do one action
  else -another action

所以请建议我该怎么做?

【问题讨论】:

    标签: collections meteor


    【解决方案1】:

    除了user728291的回答使用回调,在服务器上,你还可以这样做:

    var value = Collection.insert({foo: bar});

    这将在成功时返回插入记录的_id(执行被阻止,直到数据库确认写入)。您将不得不处理try...catch 中可能出现的错误,但有时回调只是有点麻烦:)

    所以这也应该在服务器上工作:

    try {
        var inserted = Collection.insert({foo: bar});
    } 
    catch (error) {
        console.log("Could not insert due to " + error);
    }
    
    if (inserted)
        console.log("The inserted record has _id: " + inserted);
    

    感谢@user728291 的澄清。

    【讨论】:

    • 我不确定这是否正确。来自文档 - “在服务器上,如果您不提供回调,则插入块直到数据库确认写入,或者如果出现问题则抛出异常。”并且“在客户端,插入永远不会阻塞。如果您不提供回调并且在服务器上插入失败,那么 Meteor 将向控制台记录警告。”
    • @user728291 听起来是对的。并解释了我在代码中看到的一些事情......我会更新答案,谢谢
    • 在服务器上,我想你会想使用 try 和 catch 来避免抛出错误。 'else' 部分永远不会触发。
    • 你又是正确的 user728291。可能不应该回答:)
    • 如果你想同步做这个答案是正确的。
    【解决方案2】:

    Insert 在回调函数的参数中提供服务器响应。它提供了两个参数 'error' 和 'result' 但根据插入是否成功,其中一个始终为 null。

    Client.insert( { name: "xyz", userid: "1", care:"health" }
      , function( error, result) { 
        if ( error ) console.log ( error ); //info about what went wrong
        if ( result ) console.log ( result ); //the _id of new object if successful
      }
    );
    

    请参阅documentation 了解更多信息。

    【讨论】: