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

Meteor: Prevent undefined result for findOne()

本文关键字:未定义 结果 防止 findOne 流星      更新时间:2023-09-26

我想从集合中获取一些信息 - 在本例中为用户集合;但可以是任何内容:

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;

但这看起来不是很优雅。

我在关于警卫的帖子中详细介绍了这一点。这不是 meteor 甚至 find 操作的问题——它只是 JavaScript 中的防御性编程。在可能需要警卫的情况下,普遍接受的做法是:

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

它涵盖了xy中的一个或多个未定义的情况。

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

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