【问题标题】:Http Get - How to maintain state?Http Get - 如何维护状态?
【发布时间】:2019-03-27 06:26:38
【问题描述】:

我对 Angular Http Get observable 有点困惑。我想将我的 observable 的结果分配给我的类变量。如果我在订阅中登录,它会打印类变量 OK。如果我在订阅之外登录,它会显示一个空数组。如何分配给我的类变量?

classes = [];

constructor(private navController:NavController, private httpService: HttpService) {

    this.httpService.getCalendarConfig()
        .subscribe((data) => {
            this.classes = data;
            console.log("inside" + this.classes);
        });

    console.log("outside" + this.classes);

【问题讨论】:

标签: angular typescript ionic2


【解决方案1】:

扩展@basarat 的回答:

Http 是异步的,它不会立即返回结果。我希望您在问题中提供的代码能够在“内部”之前生成“外部”的控制台日志。

代码将调用发送到服务器 (this.httpService.getCalendar...),然后继续,点击“外部”console.log。

x 次之后,服务器正在响应您的数据。正是在这一点上,订阅部分被异步命中,你的类正在被填充 (this.classes = data),你的“内部”console.log 最终显示出来。

【讨论】:

  • 感谢@Krenom,这是有道理的。那么我将如何使用该调用来更新我的本地日历?我基本上想在打开日历时更新它。我应该使用与订阅不同的模式吗?
  • @JohnSmith 查看我前几天的回答。本质上,您有一个(共享)服务,可以将值推送给组件以供使用:stackoverflow.com/questions/39897670/…
【解决方案2】:

如何分配给我的类变量

在订阅内。 outside 代码执行值的时刻并非来自服务器。您不能使用未来的值。所以你必须等它回来再使用它。

【讨论】:

  • 谢谢@basarat,那么对于我的用例来说,“订阅”是错误的模式吗?初始化课程后,我想更新日历。这只是对服务器的简单调用而不是订阅吗?我将如何实现这一目标?
  • 订阅是正确的模式。但是,您需要显示一个微调器(或其他一些指示器),直到结果从服务器返回。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2019-11-29
相关资源
最近更新 更多