【问题标题】:Angular-fullstack get current user IDAngular-fullstack 获取当前用户 ID
【发布时间】:2015-05-12 00:38:45
【问题描述】:

我正在使用https://github.com/DaftMonk/generator-angular-fullstack

我有 2 个架构:

  • 图表
    • 标题:字符串
    • 数据集:数组
    • _creator:登录用户ID
  • 用户
    • 姓名
    • 电子邮件
    • _id

当我 console.log 当前用户返回

$scope.getCurrentUser = Auth.getCurrentUser();        
console.log($scope.getCurrentUser);

但是当我尝试通过控制台记录 _id 时:

$scope.getCurrentUser = Auth.getCurrentUser();        
console.log($scope.getCurrentUser._id);

返回

未定义

谁能解释我做错了什么?

【问题讨论】:

  • 也许你应该从 Angular 教程开始,阅读 JavaScript 的异步执行。谷歌的“角度承诺”。基本上,请求还没有解决,你要等待它被加载...
  • 那为什么当我 console.log 它返回整个对象但 ._id 它未定义?
  • 我不知道 angular-fullstack,但 Auth.getCurrentUser() 返回一个承诺,而不是你的 currentUser。您需要以下内容:Auth.getCurrentUser().then(function(result){// do something with result; result should be your currentUser});
  • @Marius:当你传递一个引用时,控制台是一个观察者,而._id会被立即评估
  • 除了这个问题,isLoggedIn 也没有正确更新。一些前端元素通过 ng-show/hide 依赖它。登录后,该函数仍然返回false,直到我刷新页面。有什么线索吗?

标签: javascript jquery angularjs node.js mongodb


【解决方案1】:

chrome 控制台中的对象仅在首次打开时才被评估。

这意味着当你 console.log 一个像 Auth.getCurrentUser() 的返回值的对象时,控制台会显示一个对它的引用 - 这在日志调用时包含一个 promise 对象,但它很可能由当你在控制台上打开它时,你就会看到你正在寻找的属性。

另一方面,当您记录 $scope.getCurrentUser._id 时,这是对 Promise 对象进行属性查找的结果 - 它会打印属性的当前值,即 undefined

关于干净代码的注意事项:您的作用域变量称为 getCurrentUser,这让人认为它是一个 getter 函数,但实际上它是一个 getter 函数的返回值。这令人困惑。

【讨论】:

  • 如果您查看getCurrentUser 的实现,您会发现它可以同步和异步工作。如果您不提供参数(如回调函数),它应该同步响应。不幸的是,情况并非如此。我错过了什么吗?
  • @molerat 我知道你来自哪里,但你可以在 OP 的屏幕截图中看到一个 Promise 对象已返回给他。您的推理似乎是正确的,但也许当时的实施有所不同? (已经 1.5 年了......)无论哪种方式,您似乎都指出了与 OP 的最新 cmets 稍微无关的问题,我建议改为打开一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 2022-01-22
相关资源
最近更新 更多