我的代码库中有这个烦人的问题,假设我有一个黑盒,它是一个发布/订阅服务,许多模块可以发布或订阅。
在我的特定问题中,我有两个发布非常接近并调用相同的函数。
例如在伪代码中
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 但它似乎有点矫枉过正,尽管它肯定会起作用。知道如何升级吗?
谢谢