如何在 javascript 中锁定没有外部范围变量的发布/订阅订阅者?

问题描述 投票:0回答:0

我的代码库中有这个烦人的问题,假设我有一个黑盒,它是一个发布/订阅服务,许多模块可以发布或订阅。

在我的特定问题中,我有两个发布非常接近并调用相同的函数。

例如在伪代码中

listenerOnSomething(){
    publishToSub(1) 
}

listenerOnSomethingElse(){
   publishToSub(2)
}


// sub which is called from publishToSub
sub('subToThis'){
 publishSomethingToAnotherSub();
  or
 publishSomethingToAnotherSub();
}

在 publishSomethingToAnotherSub 中有对 BE 端点的异步调用,这可能需要一些时间。我不能

await
那些
publishSomethingToAnotherSub
电话。当
publishToSub
被调用在一起时,这可能会导致竞争条件。我也无法控制这些调用的时间。

我缺乏技巧的解决方案对我来说很烦人如下。

export const setProgress = (progressStatus: boolean) => {
  inProgress = progressStatus;
};

let inProgress = false;

sub('subToThis'){
 await precond();
 publishSomethingToAnotherSub();
  or
 publishSomethingToAnotherSub();
}

async function precond() {
  while (inProgress) {
    await new Promise((resolve) =>
      setTimeout(async () => {
        resolve(null);
      }, 50),
    );
  }
  setHealthCheckProgress(true);
}

 //somewhere down the line call setProgress(false)

这避免了我所有的比赛条件并且完美地工作但是它是丑陋和悲伤的。我看过 https://www.npmjs.com/package/async-mutex 但它似乎有点矫枉过正,尽管它肯定会起作用。知道如何升级吗?

谢谢

javascript coding-style
© www.soinside.com 2019 - 2024. All rights reserved.