我想从集合中获取一些信息 - 在本例中是用户集合;但可能是任何东西:
var result = Users.findOne({ _id: Meteor.userId() }).profile.anything;
在某些情况下,信息丢失。例如,如果数据库为空,我将收到错误Exception in template helper: TypeError: Cannot read property 'profile' of undefined
。
如果我使用findOne
并获得未定义的结果,阻止这种情况的最佳方法是什么?
我会做类似的事情:
var temp = Users.findOne({ _id: Meteor.userId() });
if (temp)
var result = temp.profile.anything;
但这看起来不太优雅。
答案 0 :(得分:1)
我在guards的帖子中详细介绍了这一点。对于流星甚至是find
操作来说,这不是一个真正的问题 - 它只是JavaScript中的防御性编程。在可能需要警卫的情况下,普遍接受的做法是:
x && x.y && x.y.z
其中包含x
和y
中的一个或多个未定义的情况。
您可能会遇到长函数基于某些数据存在的情况。在这些情况下,您可能希望执行以下操作:
user = Meteor.user();
if (!user) return;
...
// rest of function which assumes user is defined