javascript - 如果 bool 值在任意点为真且持续时间超过 X 秒

标签 javascript angular

我正在使用 Angular、Ionic 和 Firebase 构建一个应用。

在页面加载时,我将 bool 值 isLoading 设置为 true,当数据在应用程序中加载时, bool 值设置为 false >。这非常可靠,但有时,如果互联网速度慢/出现故障,isLoading 永远不会设置为 false,或者更确切地说,应该完成的功能,没有。

所以我的问题是,我可以进行某种订阅或“检查”以查看应用程序运行时 isLoading 是否为 true 时间超过 3 秒活跃?

到目前为止,代码非常简单:

定义 isLoading bool 值:

isLoading: boolean = true;

调用firebase数据库:

ngOnInit() {
    this.loadUser();
});

loadUser() {
  this.database.database.ref('/users/'+this.user.uid).once('value', (snapshot) => {
      this.isLoading = false;
  });
});

如果isLoading在任何时候为true超过3秒,我该如何重新调用loadUser()

最佳答案

您可能需要检查错误条件和 setInterval 的组合。这样您就可以在等待时定期执行某些操作,并且可以处理来自 firebase 的错误

loadUser() {
  let interval = setInterval(() => { 
    if (this.isLoading) {
      //You are still waiting
    }
  }, 3000)
  this.database.database.ref('/users/'+this.user.uid).once('value', (snapshot) => {
      this.isLoading = false;
      clearInterval(interval);
  },
  (error) => {
    //Handle error case
    clearInterval(interval);
  });
};

我对 firebase 不太熟悉,但您可能需要在 ref 调用中执行类似的失败回调,以防错误存在而不是处理 once

关于javascript - 如果 bool 值在任意点为真且持续时间超过 X 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52131968/

相关文章:

javascript - 变量分布在相同的组件中

javascript - Node.js 泄漏 for..in 循环

Angular 组件动态编译 - ng-content 与选择不工作

没有路由器 socket 的 Angular 4 路由器

javascript - jQuery slider 淡入淡出

Angular 5 : Service Getter Why Double Arrow if Referenced to Getter instead of Calling Getter Directly

angular - ngIf 放在哪里?

javascript - Blob 数据位于何处?

javascript - Node fs.writefile\n 未将文本添加到新行

javascript - 当 View 位于 Fancybox 内时,我无法触发 Backbone.js 事件