Meteor:防止findOne()的未定义结果

时间:2016-02-16 19:09:48

标签: javascript meteor

我想从集合中获取一些信息 - 在本例中是用户集合;但可能是任何东西:

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;

但这看起来不太优雅。

1 个答案:

答案 0 :(得分:1)

我在guards的帖子中详细介绍了这一点。对于流星甚至是find操作来说,这不是一个真正的问题 - 它只是JavaScript中的防御性编程。在可能需要警卫的情况下,普遍接受的做法是:

x && x.y && x.y.z

其中包含xy中的一个或多个未定义的情况。

您可能会遇到长函数基于某些数据存在的情况。在这些情况下,您可能希望执行以下操作:

user = Meteor.user();
if (!user) return;
...
// rest of function which assumes user is defined