在我的代码中,我正在检查if (Meteor.user().profile.something.someAttribute) {
。但是,如果Meteor用户未登录(即,调用Meteor.user()
失败),则会引发TypeError。我认为这会更优雅地失败,因为if语句会看到然后不执行。但是,它会抛出错误,然后搞砸我的应用程序。我通过
if(Meteor.user()) {
if (Meteor.user().profile.something.someAttribute) {
但这看起来并不优雅。有没有更好的方法来做到这一点,或者我对Javascript有一些基本的误解?
答案 0 :(得分:2)
当用户未登录时,Meteor.user()
返回null
,stated in the documentation并尝试访问profile
null
失败。检查返回值是唯一的方法,但你可以更优雅地写它:
let user = Meteor.user();
if (user && user.profile.something.someAttribute) { … }
答案 1 :(得分:1)
这真的是一个javascript问题,而不是流星问题。它也是一种非常常见的模式。你可能会发现这个解决方案更优雅:
if (Meteor.user()
&& Meteor.user().profile.something.someAttribute) {
但除非你想编写辅助函数,否则没有真正的方法,例如:
function check(object) {
if (argument.length == 0) {
return object;
} else if (object) {
return check(object[arguments[0]], arguments.slice(1));
} else {
return undefined;
}
}
然后使用
if (check(Meteor.user(), "profile", "something", "someAttribute")) {
这将继续小心并在请求子潜艇之前检查每个子对象的未定义。