5

在中,使用和简单地抛出一个有什么Meteor.publish区别?this.errorMeteor.Error

4

2 回答 2

6

this.error仅在发布方法中可用。根据文档

停止此客户端的订阅,在客户端上触发对onError传递给 的回调Meteor.subscribe(如果有)的调用。如果 error 不是 a Meteor.Error,它将被映射到Meteor.Error(500, "Internal server error")

抛出 aMeteor.Error不会停止客户端的订阅,它只会终止执行并引发异常。因此,如果您想确保 Meteor 会在您之后进行清理,并允许您在发生意外情况时在客户端处理错误,建议使用this.error而不是将您自己的东西扔到 publish 方法中。

于 2013-03-19T22:18:20.557 回答
3

看来他们是一样的。在源代码中:

try {
  var res = self._handler.apply(self, EJSON.clone(self._params));
} catch (e) {
  self.error(e);
  return;
}

因此,如果抛出异常,error无论如何都会调用。error也停止订阅。

于 2013-03-19T22:34:16.643 回答