Angularjs 获取承诺中的价值

Angularjs 获取承诺中的价值,angularjs,firebase,Angularjs,Firebase,我的控制器中有此代码,用于创建项目: Item.create(short).then(function(response){ console.log(response); }); 这是从相应服务中提取的,它返回一个承诺: return sync.$set({title: "test", random: "random string created in this service"}); 现在我想使用在控制器中创建的随机字符串。我得到了回复,但我不确定如何访问数据 我尝试了response

我的控制器中有此代码,用于创建
项目

Item.create(short).then(function(response){
  console.log(response);
});
这是从相应服务中提取的,它返回一个
承诺

return sync.$set({title: "test", random: "random string created in this service"});
现在我想使用在控制器中创建的
随机
字符串。我得到了回复,但我不确定如何访问数据


我尝试了
response.random
response.data.random
等,但我尝试的一切都是
未索引的

您的代码示例非常小(您的服务中有一行代码?),您的故障排除细节也有点简洁。请提供尽可能多的数据,以帮助我们形成一个完整的画面

根据现有资料和阅读资料,我们在此做出一些假设,我们可以得出以下结论:

Item.create(short).then(function(item){
  console.log(item.random);
}/*, function(error) {} */);
  • $set返回解析为firebase引用的承诺(不是您发送的数据;不是快照)
  • 您希望接收随机id(或者可能是您发送的json数据)
  • 我们可以利用更好的设计来更完整地描述您的用例
下面是一个如何解决这个问题的快速方法,通过链接承诺并返回您想要的任何内容,而不是不太有用的参考:

var randomId = /* some magic */;
var data = {title: "test", random: randomId};
return sync.$set(data).then(function(ref) {
   return sync; // we could also return data here, sync seems the most flexible
});
现在,我们可以执行以下操作:

Item.create(short).then(function(item){
  console.log(item.random);
}/*, function(error) {} */);

当您记录响应时,它看起来是什么样子?
E{m:De,path:F,Ca:undefined,da:undefined,wa:undefined…}
其中还有更多我不理解的层。您拥有的看起来像Firebase
DataSnapshot
。要从中获取值,请执行
response.val()
。谢谢Frank。我会试试看。你似乎在Firebase上回答了我所有的问题-请随意提供“答案”@Kato:你想让tommy使用令人敬畏的新堆栈片段/代码片段编辑器,不是吗?承认吧!