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 执行的单线程性质,当在一个同步块中分配值时,您的检查在所有情况下都是正确的,因为控制流无法 "jump" 您的检查执行分配时的逻辑。