代码之家  ›  专栏  ›  技术社区  ›  Simon

如果布尔值在任何一点为真并持续X秒以上

  •  0
  • Simon  · 技术社区  · 6 年前

    isLoading true false . 这是相当可靠的,但有时,如果互联网速度慢/出现故障

    所以我的问题是,我能有一些订阅或“检查”,看看是否 卸载 是的

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

    定义 布尔:

    isLoading: boolean = true;
    

    调用firebase数据库:

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

    你知道我该怎么重新打电话吗 loadUser() 如果 卸载

    3 回复  |  直到 6 年前
        1
  •  4
  •   rfestag    6 年前

    您可能需要同时检查错误条件和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

        2
  •  1
  •   SiddAjmera    6 年前

    你应该使用 AngularFire2 相反。这将使您能够更好地控制对数据库的操作,因为读、写和更新将返回 AngularFireList AngularFireObject .

    基本上,这些值将是可观察类型或承诺类型的值。

    Promise 键入,则可以执行重试或设置 isLoading false catch

    如果它是一个 Observable 类型,你可以 retry 可观察的 或设置 卸载 finally 回拨。

        3
  •  0
  •   Jacob    6 年前

    setTimeout(() => {
        // Do a thing after three seconds
    }, 3000);
    

    尝试在布尔值上执行以下操作:

    (isLoading) ? setTimeout(() => { // Do a thing after three seconds }, 3000) : null