Angular 4中的竞争条件是否可行?

时间:2017-11-25 09:12:53

标签: javascript angular rest typescript race-condition

我的Angular 4服务:

@Injectable()
export class MyService {

  private myArray: string[] = [];

  constructor() { }

  private calculate(result): void {
    myArray.length = 0;
    // Do some calculations and add results in myArray
  }

  public invokeCallBack(callBack: Function) {
    // the function callBack returns an observable
    // Rest calls are done in the callBack function
    callBack().subscribe(
      (result) => {
        // Rest call is finished
        this.calculate(result);
      }
    );
  }
}

其他组件多次调用invokeCallBack(callBack)。

如果同时完成2个(或更多)休息呼叫,会发生什么?

1)方法this.calculate(result)会同时被调用2次吗?如果是这种情况,则myArray可能具有不一致的状态,因为2次计算同时发生(=>竞争条件)。怎么可以解决这个问题?

2)或者.calculate(结果)总是被称为同步吗?如果是这种情况,一次只能进行一次计算,因此myArray始终(保证)处于一致状态。

1 个答案:

答案 0 :(得分:3)

假设calculate中没有异步代码,该方法将在再次调用之前始终运行完毕。

calculate的2个独立“实例”不可能同时运行。

这是因为JavaScript(在浏览器中)is single-threaded