我的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始终(保证)处于一致状态。
答案 0 :(得分:3)
假设calculate
中没有异步代码,该方法将在再次调用之前始终运行完毕。
calculate
的2个独立“实例”不可能同时运行。
这是因为JavaScript(在浏览器中)is single-threaded。