我在一个循环中对服务器进行异步调用。显然,它创建了一个竞争条件。下面是代码。
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中实现类似的功能,如果可以,我该如何实现?
发布于 2019-02-18 21:01:41
因此,除非您的updateData函数包含异步调用本身,否则不存在竞争条件。
https://stackoverflow.com/questions/54746147
复制相似问题