Ember.js 带有承诺数据的Ember服务属性

Ember.js 带有承诺数据的Ember服务属性,ember.js,Ember.js,我有一个服务来获取当前用户,当我返回一个硬编码的对象时,它会正确返回,但是我不能让它从ajax调用返回数据 export default Ember.Service.extend({ currentUser: Ember.computed(function() { Ember.$.ajax({ url: "http://localhost:8000/v1/me/" }).then(function(data){ console.log(data);

我有一个服务来获取当前用户,当我返回一个硬编码的对象时,它会正确返回,但是我不能让它从ajax调用返回数据

export default  Ember.Service.extend({
  currentUser: Ember.computed(function() {
    Ember.$.ajax({
      url: "http://localhost:8000/v1/me/"
    }).then(function(data){
      console.log(data);
      return data;
    },
    function(err){
      console.log(err);
    });
  }),
});
根据承诺中的
console.log
,我知道数据返回正确

当我在控制器中使用此服务时,它不会为currentUser返回任何内容,但是我知道所有内容都已正确连接,因为如果我将一个Ember.Object替换为ajax查询,它会将该对象返回给控制器


我是否需要对包含ajax查询的属性做一些特殊的处理,以便能够在控制器中使用返回的数据?

我认为它不会以您希望的方式工作。至少我从未读到过你可以将承诺作为计算财产返还。您可以做的是在客户端授权时从服务器获取当前用户,并将其保存在本地存储中。在计算属性中,从本地存储读取数据并返回


你可能会发现一个有趣的讨论,它在同样的情况下帮助了我。如果您使用ember simple auth,您甚至会发现有一段现成的代码。

ember.$。ajax
返回一个“ajax承诺”,而不是承诺/a+承诺,因此您会遇到问题。您实际上也没有返回
Ember.$.ajax
调用,因此方法的返回值未定义。此外,您可能需要将调用包装在ObjectProxy中。但是当ember simple auth发行版1.0时,
ember simple auth
的创建者在
http://log.simplabs.com/post/131698328145/updating-to-ember-simple-auth-10
,他遵守承诺,而不是为get currentUser提供本地存储