带有chrome 22的bug javascript

时间:2012-10-15 10:10:44

标签: javascript google-chrome

Chrome 22升级(9月25日稳定发布)以来,我发现我的程序中有一个我不明白的新错误。

我的javascript程序执行以下操作:

  1. 使用asynchrone arraybuffer获取XMLHttpRequest的二进制文件(STL网格)。
  2. 加载文件时使用DataView对其进行解析,然后调用data.getFloat32(offset, isLittleEndian)data.getUint32(offset, isLittleEndian)等阅读方法。解析数据存储在用于加载和解析文件的对象数组中。
  3. 我实施了一个barriere,以确保在继续
  4. 之前等待加载所有文件
  5. 当加载所有文件时,我会遍历每个加载器并使用解析后的数据在for循环中创建对象,如下所示:

    var geom = new THREE.Geometry();
    for(var v = 0; v < this.result[0].length; v++) {
        geom.vertices.push(new THREE.Vertex(new THREE.Vector3(this.result[0][v][0],
                                                              this.result[0][v][1],
                                                              this.result[0][v][2])));
    }
    
    for(var f = 0; f < this.result[1].length; f++) {
        geom.faces.push(new THREE.Face3(this.result[1][f][0],
                                        this.result[1][f][1],
                                        this.result[1][f][2]));
    }
    
  6. 问题是在这些循环之后,数组geom.facesundefined

  7. 我找到了一种方法来纠正这种竞争,但我不明白为什么它会改变任何东西:我将数组的长度存储在变量中,如下所示:

    var geom = new THREE.Geometry();
    var vl = this.result[0].length; // <===  | these are the added variables
    var fl = this.result[1].length; // <===  | that fix the bug
    for(var v = 0; v < vl; v++) {
        geom.vertices.push(new THREE.Vertex(new THREE.Vector3(this.result[0][v][0],
                                                              this.result[0][v][1],
                                                              this.result[0][v][2])));
    }
    
    for(var f = 0; f < fl; f++) {
        geom.faces.push(new THREE.Face3(this.result[1][f][0],
                                        this.result[1][f][1],
                                        this.result[1][f][2]));
    }
    

    如果有人能够向我解释会发生什么,以及为什么我会在我的代码的第一个版本中丢失我的数组,我将非常感激。

0 个答案:

没有答案