在Meteor.publish
中,使用this.error
和简单地抛出Meteor.Error
之间有什么区别?
答案 0 :(得分:6)
this.error
仅在publish方法中可用。每the docs:
停止此客户端的订阅,在客户端上触发传递给
onError
的{{1}}回调,如果有的话。如果错误不是Meteor.subscribe
,则会将其映射到Meteor.Error
。
抛出Meteor.Error(500, "Internal server error")
不会停止客户端的订阅,它只会终止执行并引发异常。因此,如果您希望确保Meteor将在您之后清理并允许您在发生意外情况时在客户端上处理错误,则建议使用Meteor.Error
而不是将自己的内容放在发布方法中。
答案 1 :(得分:3)
看来它们是一样的。在源代码中:
try {
var res = self._handler.apply(self, EJSON.clone(self._params));
} catch (e) {
self.error(e);
return;
}
因此,如果抛出异常,则无论如何都会调用error
。 error
也会停止订阅。