我知道JS是单线程的,技术上不可能有竞争条件,但由于异步和事件循环,应该会有一些不确定性.下面是一个过于简单化的例子:
class TestClass {
// ...
async a(returnsValue) {
this.value = await returnsValue()
}
b() {
this.value.mutatingMethod()
return this.value
}
async c(val) {
await this.a(val)
// do more stuff
await otherFunction(this.b())
}
}
假设b()
依赖于自对a()
的调用以来未被更改的this.value
,并且从程序中的多个不同位置快速连续多次调用c(val)
.这会不会造成一场数据竞赛,this.value
会在呼叫a()
和b()
之间发生变化?
作为参考,我已经先发制人地用mutex修复了我的问题,但我一直在质疑是否一开始就有问题.