【问题标题】:Can't catch meteor error thrown in Method from Event无法从事件中捕获方法中抛出的流星错误
【发布时间】:2015-06-28 19:13:17
【问题描述】:

我有一个方法,它会引发错误,因此我可以在我的事件中捕获它并将其显示给用户,如下所示:

  Meteor.methods({
    addPlayer: function(nickname) {
      if (nickname == "") {
        throw new Meteor.Error('empty-nickname', 'You must choose a nickname');
      } else {
        Player.insert({
          nickname: nickname,
        });
      }
    },
  })

在我的事件中

'submit form': function (e) {
  e.preventDefault();

  var nickname = $('input').val();

  Meteor.call('addPlayer', nickname, function(error, result) {
    if (error) {
      console.log(typeof error);
      console.log(error);
    }
  });
}

但是,meteor 在模拟调用'addPlayer'的效果时仍然会抛出异常,并且错误变量不是错误对象,而是与控制台日志具有相同消息的字符串,所以我在控制台中收到了两个错误而不是错误对象。

在 try/catch 中包装 method.call 不起作用。

我在这里错过了什么?

-- 编辑 这是结果的打印屏幕:

完整分辨率的图片链接:http://i.stack.imgur.com/zABar.png

【问题讨论】:

  • 代码对我来说似乎是正确的。 “模拟调用'addPlayer'的效果”是什么意思?你的调用方式与代码中显示的不同吗?
  • 你在哪里定义方法?在服务器和客户端(存根)上还是仅在服务器上? (“如果存根抛出异常,它将被记录到控制台。”)
  • throw new Meteor.Error(..) 看起来不对。它应该包含一个错误号。
  • 抛出错误没有帮助。该方法同时为服务器和客户端定义,并由客户端在表单提交事件中调用。
  • 只在服务器上抛出错误。把它包裹在if(!this.isSimulation) {}里面

标签: meteor


【解决方案1】:

仅在服务器上引发错误。把它包裹在if(!this.isSimulation) {}

里面
Meteor.methods({
  addPlayer: function(nickname) {
    if (nickname == "") {
      if(!this.isSimulation) {
        throw new Meteor.Error('empty-nickname', 'You must choose a nickname');
      }
    } else {
      Player.insert({
        nickname: nickname,
      });
    }
  },
})

【讨论】:

    猜你喜欢
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2020-01-28
    相关资源
    最近更新 更多