2

我的 HTML 有以下代码:

button (click)="doFunc()" 

在我的 ts 文件中,我有以下内容:

doFunc(){
    this.service.executeAFuncWhichIsAsynchronous().subscribe(x => { updateMyUi(); });
}

当我单击该按钮两次时,会进行两次服务调用。我不希望这种情况发生。相反,应忽略后续点击。

我怎样才能做到这一点?

4

2 回答 2

0

我会尝试在你的状态管理器中的函数调用之前设置一个标志(如果你正在使用一个)来确定调用是否成功。然后在您的异步函数中,如果设置了该标志,则拒绝继续。它看起来像这样

import state from './state'

function someAsyncFunc()
{
  if (state.executing) {return}
  else
  {
   state.executing = true;
   setTimeout(function(){ console.log("got here");state.executing=false;return; }, 3000);
  }
}

async function doFunc()
{
  await someAsyncFunc();
}

doFunc()
doFunc()
doFunc()


于 2020-04-06T17:12:03.263 回答
0

只需先订阅即可。https://rxmarbles.com/#first

像这样

doFunc(){ 

  this
    .service
    .executeAFuncWhichIsAsynchronous()
    .first()
    .subscribe(x => updateMyUi(x)); 

}

于 2020-04-06T17:25:49.590 回答