全局数组不';无法在javascript函数中进行修改

全局数组不';无法在javascript函数中进行修改,javascript,global-variables,Javascript,Global Variables,我在这个问题上花了太多时间。。。所以我想声明一个名为“positions”的2D数组,它可以在其他函数中使用。使用函数“init”中的解析代码,我尝试创建一个名为“parsing”的简单函数,以避免每次使用positions数组时重复冗长的解析过程。除了在其他函数中输入console.log(positions)时,它总是返回一个空数组=[]。 为什么在解析函数中“positions”没有被修改?我该怎么做?这是使用的代码: var positions = []; parsing(); ini

我在这个问题上花了太多时间。。。所以我想声明一个名为“positions”的2D数组,它可以在其他函数中使用。使用函数“init”中的解析代码,我尝试创建一个名为“parsing”的简单函数,以避免每次使用positions数组时重复冗长的解析过程。除了在其他函数中输入console.log(positions)时,它总是返回一个空数组=[]。 为什么在解析函数中“positions”没有被修改?我该怎么做?这是使用的代码:

var positions = [];

parsing();
init();

function parsing() {
    fetch('Petit_film_256_atomes.txt').then(response => response.text()).then(text => {
        const arr = text.split('\n')
            .map(line => line.trim())
            .map((arr) => arr.split(' '))
            .map(([size, x, y, z]) => ({ 
                  size: Number(size), 
                  x: Number(x), 
                  y: Number(y), 
                  z: Number(z) 
            }));
            while (arr.length > 0) {
                positions.push(arr.splice(0, size).slice(2));
            }
    })
}

我没有仔细研究在所有
.map
调用期间发生的事情,但问题可能是
解析
在调用
init
时还没有完成。您可以这样尝试:

var positions = [];

parsing(init);

function parsing(cb) {
    fetch('Petit_film_256_atomes.txt').then(response => response.text()).then(text => {
        const arr = text.split('\n')
            .map(line => line.trim())
            .map((arr) => arr.split(' '))
            .map(([size, x, y, z]) => ({ 
                size: Number(size), 
                x: Number(x), 
                y: Number(y), 
                z: Number(z) 
        }));
        while (arr.length > 0) {
            positions.push(arr.splice(0, size).slice(2));
        }
        if (typeof(cb) === 'function') {
            cb();
        }
   })
}

因为您有一个异步调用,并且表现为ti是同步的。只需将
init
调用放在
中,然后也放在
回调中。不要接受回调。使用你的承诺,并回报它<代码>解析()。然后(初始化)