Ember.js 违背承诺获得用户
我可能做出了一个失礼的承诺,但在验证一个用户后,我想将该用户的配置文件加载到我创建的Ember.js 违背承诺获得用户,ember.js,ember-data,Ember.js,Ember Data,我可能做出了一个失礼的承诺,但在验证一个用户后,我想将该用户的配置文件加载到我创建的App.Sessionsingleton中: App.Session.set( 'userProfile', self.get('store').find('user',App.Session.get('userId')) ); 这将导致进行API调用并返回有效的resultset,但由于某些原因,在调试器中我得到了一个空结果。具体地说,我确实看到了User.id,但是其余的列是空白的 从调试
App.Session
singleton中:
App.Session.set(
'userProfile',
self.get('store').find('user',App.Session.get('userId'))
);
这将导致进行API调用并返回有效的resultset,但由于某些原因,在调试器中我得到了一个空结果。具体地说,我确实看到了User.id
,但是其余的列是空白的
从调试器中,以下是JSON响应:
{
"user": {
"id": "1",
"username": "jsmith",
"name": {
"first_name": "Joe",
"last_name": "Smith"
},
"emails": [
{
"id": "52153c0330063",
"name": "work-1",
"type": "other",
"address": "new@notreally.com",
"comments": "",
"status": "active",
"is_primary": false
},
{
"id": "52153d1b90ad0",
"name": "work-2",
"type": "other",
"address": "old@yesreally.com",
"comments": "",
"status": "active",
"is_primary": true
},
]
}
我对承诺有点陌生,所以我想如果我把代码改成:
self.get('store').find('user',App.Session.get('userId')).then( function(profile){
App.Session.set('userProfile', profile);
});
当我写这段新代码时,我对我的新承诺敏锐性感觉很好。不幸的是,我骄傲的时刻以失败而告终。我的第二个代码段的行为与第一个代码段完全相同。嗯
有人能帮忙吗
---------**更新**---------
现在我已经包括了User
的模型定义和我提到的调试器窗口的图片
用户模型
调试窗口
登录之前,模型查看器如下所示:
然后在登录后显示如下:
然后看看我们看到的记录细节:
好的,答案似乎归结为两件事。首先,处理我尝试过的承诺的第二个代码片段:
self.get('store').find('user',App.Session.get('userId')).then( function(profile){
App.Session.set('userProfile', profile);
});
方法正确吗。第一种方法只会让你以一种“心碎”的方式“背信弃义”,从技术上讲不是这样,但关键是它不起作用
但是,我的第二个promise实现没有起作用的原因是由于模型
间接地,特别是由于我为名称
设置的反序列化器
当反序列化程序在灰烬数据v0.1x世界中运行时,我对此抓挠了一秒钟,所以我做了看起来合适的事情。。。我把责任归咎于余烬数据。来吧,我们都做过了。事实上,余烬数据与此无关,一旦我愿意接受指责,我意识到这仅仅是因为没有将我的
名称
对象转移到我目前正在进行的项目。啊 你的代码看起来不错。您如何看到这些字段是空的?你的模型看起来像什么?@Daniel我在问题中添加了更多细节来回答你的问题。顺便说一句,当你说代码看起来还可以的时候,你是指我在顶部的代码(第一次尝试)还是我后来尝试更具承诺的识字能力?值得一提的是,我注意到了这两种方法之间的差异。。。在第二种方法中,我在调试器中得到了一些错误,我仍然没有整理,并且没有添加用户
记录。我指的是承诺,这是正确的方法。
self.get('store').find('user',App.Session.get('userId')).then( function(profile){
App.Session.set('userProfile', profile);
});