首页 > 解决方案 > 如何在没有 setTimeout 的情况下延迟调用功能?角

问题描述

我需要将函数调用延迟几秒钟。我有解决方案,但足够好。

  public recieveNewContact() {
      this.allData();
      setTimeout(() => {  
         this.lastAddedItem()
      }, 100)
  }


  public ngOnInit() { 
    this.allData()
  }

  allData() {
      this.accountsService.getContactPerson().subscribe(
         (data) => {
             console.log(data)
        }
      )
    }

这很好用,但我不喜欢这样……我需要更好的解决方案,也许是 rxjs ?延迟 ?

这是非常重要的。

在这种情况下,我不需要这个:

  allData() {
      this.accountsService.getContactPerson().subscribe(
         (data) => {
             console.log(data)
             this.lastAddedItem()
        }
      )
    }

因为我不想在 init 上加载 lastAddedItem() .... 只有当 recieveNewContact 被触发时。

我将再次尝试解释:

  public recieveNewContact() {
      this.allData(); 
      this.lastAddedItem()// here to be called when is allData finished without setTimeout
  }

标签: javascriptangulartypescript

解决方案


我建议使用delay(如果您 100% 确定完成时间)或finalize(如果您想确保无论需要多长时间它都会等待)(rxjs)。

是否每次都需要调用 allData 函数,因为您可以将数据的本地副本保存在变量中,然后对其进行调整?还是 lastAddedItem API 调用?

另外我建议将 allData 设置为私有,因为不希望从 teplate 或其他组件调用它。


推荐阅读