Javascript-在检查对象属性是否存在时避免异步竞争条件
Javascript - avoiding asynchronous race condition when checking object property existence
虽然JavaScript可能不是多线程的,但它确实支持异步执行,并且两个或多个异步代码位的执行可能在同一个线程上,但无法预测异步事件顺序这一事实使得异步执行之间可能出现竞争条件。
我正在执行异步检查对象属性是否存在。所述属性将被分配一个大型多维子对象,包括子对象数组、自己的属性等。
在下面的例子中,我已经知道父对象存在,即我知道myObject
存在。我希望在myObject['myObjectChildren']
的所有内容到位后立即对return true
进行检查。
为了检查对象属性的存在,我执行以下操作:
if(myObject.hasOwnProperty('myObjectChildren'))
return true;
分配myObject['myObjectChildren']
的唯一方式是格式,但此分配是异步完成的:
myObject['myObjectChildren'] = {
largeChildObject:{
grandchildren:[
{grandchild1:{
grandchild1GreatGrandChildren:[
grandchild1GreatGrandChild1:{},
grandchild1GreatGrandChild2:{}....
]
},
{grandchild2:{},
{grandchild3:{}....
]
}
};
我的问题:
我的问题是,我是否可以放心地假设,一旦myObject.hasOwnProperty('myObjectChildren') === true
、myObject['myObjectChildren']
分配了所有内容,记住它是一次性分配的。检查有可能失败的情况吗?例如,在赋值时,属性是否首先实例化为'undefined'
?
目前,我的代码只有在所有内容都到位时才返回true。然而,我担心的是我无意中进入了比赛状态。
由于javascript执行的单线程性质,当在一个同步块中分配值时,您的检查在任何情况下都是正确的,因为在执行分配时,控制流无法"跳转"到您的检查逻辑。
相关文章:
- esri javascript异步打印
- JavaScript异步问题
- $translateProvider.useStaticFilesLoader的Angular Translate异步定
- 异步facebook功能
- 异步并行错误
- 在Redux中,我应该在哪里编写复杂的异步流
- 角度异步http自动完成
- 如何从SeleniumWebdriver获取异步Javascript响应
- 如何使用异步调用更改工厂的变量
- 在等待异步任务时永久循环
- 如何在异步函数中使用javascript对象
- 调用后不异步Ajax忽略函数
- learnyounode#9杂耍异步
- 异步获取数据使用JavaScript同步获取数据
- Javascript/JQuery处理并发/异步调用和数据竞争
- Javascript-在检查对象属性是否存在时避免异步竞争条件
- 如何使用javascript使异步ajax半同步以避免竞争条件
- Javascript:跨浏览器异步调度和竞争条件
- 避免竞争条件在谷歌分析异步跟踪
- 我需要关注异步Javascript的竞争条件吗