javascript - 锁定 Javascript 函数

标签 javascript angular typescript

我正在循环中对服务器进行异步调用。显然,它创造了竞争条件。这是代码。

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/

相关文章:

javascript - 用 Angular 2 CLI 表达

javascript - Angular CLI,类型错误 : Cannot read property 'value' of undefined

javascript 在调试器中没有显示断线

javascript - Chrome - 扩展选项屏幕不允许我关注下一个字段

javascript - ionic Angular : Triggering checkbox from card click

javascript - 如何在js中简单地使用带有Abs()的eval字符串公式(谷歌应用程序脚本)

javascript - Angular 数据表,配置行单击事件时无法单击行按钮

javascript - CSS 值不适用于 Angular 4 中动态注入(inject)的 html div 元素

javascript - 如何在 Typescript 中编写文字 Javascript

typescript - TypeScript JSDoc 样式的类型是否具有常规类型的全部功能?