我正在循环中对服务器进行异步调用。显然,它创造了竞争条件。这是代码。
for (let i = 0; i < arr.length; i++) {
this.service.execute(arr[i]).pipe(takeUntil(this.ngUnsubscribe)).subscribe(response => {
this.updateData(response); // Avoid race-condition here
}, error => {
//
});
}
我需要一种机制来避免竞争条件。但同时我不想链接异步调用(我希望它们并行工作,只有 updateData
函数调用应该同步。)。如果我可以使用类似 Python 的锁定机制,我的代码将如下所示:
for (let i = 0; i < arr.length; i++) {
this.service.execute(arr[i]).pipe(takeUntil(this.ngUnsubscribe)).subscribe(response => {
// Assume lock is defined
this.lock.acquire();
this.updateData(response); // Avoid race-condition here
this.lock.release();
}, error => {
//
});
}
从上面的代码可以清楚地看到,只有 updateData
的调用在相互等待,而不是对服务器的异步调用。是否有可能在 Javascript 中实现类似的功能,如果可以的话我该怎么做?
最佳答案
Javascript execution is always single-threaded ,因此除非您的 updateData
函数本身包含异步调用,否则不存在竞争条件。
关于javascript - 锁定 Javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54746147/