打字稿/ Javascript对象

时间:2016-08-25 17:50:06

标签: javascript typescript horizon

我一直在学习。我的问题是:为什么:

let user = {
   firstname: '',
   secondname: ''
}

let hz = new Horizon({host: "164.132.192.28:3100"});
let table = hz('users');
hz.connect();
table.find(1).fetch().subscribe((value) => { 
   user = {
     firstname: value.firstname,
     secondname: value.secondname
   }

   //OR: 
   user.firstname = value.firstname;
   user.secondname = value.secondname;

});

console.log(user);

给了我这个:

...

为什么我无法获得价值?:

console.log(user.firstname);
//prints nothing

我的第三个问题:如何将查询结果保存到对象中并在查询外使用它?如果我使用'return'关键字,则结果类似。我知道这是一个新手问题,但我真的很挣扎......有人能帮帮我吗?

1 个答案:

答案 0 :(得分:2)

以下一行:

table.find(1).fetch().subscribe(...);

正在调用异步方法。这意味着提供的回调将在稍后调用,而不是在调用subscribe时立即调用。因此,当涉及console.log()时,浏览器会打印出其字符串表示形式,此时,名字和姓氏都尚未填充 - 因此为空字段。稍后您单击该对象以在控制台中查看其内容 - 浏览器会在此时对其进行评估,并且很可能订阅方法已经完成 - 因此您将获得您的名字和姓氏。

您的代码实际上是将数据保存在本地user变量中。您必须记住的是,只有在调用subscribe回调后才能访问它。