繁体   English   中英

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') === truemyObject['myObjectChildren']已分配了所有内容,请记住,它是一次性分配的。 在任何情况下检查可能会失败? 例如,在赋值时,该属性是否首先被实例化为'undefined'

目前,我的代码仅在所有内容都到位时才返回true。 但是,我担心的是我无意中进入了比赛状态。

由于javascript执行具有单线程性质,因此在所有值均分配到一个同步块中的情况下,在所有情况下您的检查都是正确的,因为执行分配时控制流无法“跳转”到您的检查逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM