经过大量研究,我设法让这个工作,我认为它回答了你的问题。
请记住,我使用的是 Meteor 1.6,但它应该为您提供信息以使其在您身边工作。
关于出版/出版:
try {
// get the data and add it to the publication
...
self.ready();
} catch (exception) {
logger.error(exception);
// send the exception to the client through the publication
this.error(new Meteor.Error('500', 'Error getting data from API', exception));
}
在 UI 组件上:
const errorFromApi = new ReactiveVar();
export default withTracker(({ match }) => {
const companyId = match.params._id;
let subscription;
if (!errorFromApi.get()) {
subscription = Meteor.subscribe('company.view', companyId, {
onStop: function (e) {
errorFromApi.set(e);
}
});
} else {
subscription = {
ready: () => {
return false;
}
};
}
return {
loading: !subscription.ready(),
company: Companies.findOne(companyId),
error: errorFromApi.get()
};
})(CompanyView);
从这里您需要做的就是获取错误道具并根据需要渲染组件。
这是error
prop 的结构(onStop
从 回调中收到subscribe
):
{
error: String,
reason: String,
details: String
}
[编辑]
有条件的原因Meteor.subscribe()
是为了避免从自然更新中获得的烦人的无限循环withTracker()
,这会导致新订阅/发布中的新错误等等。