Javascript - 检查对象 属性 是否存在时避免异步竞争条件
Javascript - avoiding asynchronous race condition when checking object property existence
虽然 JavaScript 可能不是多线程的,但它确实支持异步执行,虽然 2 个或多个异步代码位的执行可能在同一个线程上,但事实上事件的异步顺序不能被预测,使得异步执行之间的竞争条件有可能发生。
我正在执行 异步 检查对象是否存在 属性。表示属性会分配一个大的多维子对象——包括子对象数组,自身属性等
在下面的示例中,我已经知道父对象存在,即我知道 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 执行的单线程性质,当在一个同步块中分配值时,您的检查在所有情况下都是正确的,因为控制流无法 "jump" 您的检查执行分配时的逻辑。
虽然 JavaScript 可能不是多线程的,但它确实支持异步执行,虽然 2 个或多个异步代码位的执行可能在同一个线程上,但事实上事件的异步顺序不能被预测,使得异步执行之间的竞争条件有可能发生。
我正在执行 异步 检查对象是否存在 属性。表示属性会分配一个大的多维子对象——包括子对象数组,自身属性等
在下面的示例中,我已经知道父对象存在,即我知道 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 执行的单线程性质,当在一个同步块中分配值时,您的检查在所有情况下都是正确的,因为控制流无法 "jump" 您的检查执行分配时的逻辑。