全局数组不能在javascript函数中修改

问题描述:

我一直在这个问题上花费太多时间...所以我想声明一个名为“位置”的2D数组,可以在其他函数中使用。使用解析代码在函数“init”中工作,我试图创建一个简单的函数称为“解析”,以避免每次我想要使用位置数组重复长解析过程。除了当我在其他函数console.log(职位),它总是返回一个空的数组= = []。 为什么“位置”在解析函数中没有被修改,我该如何做?这是所使用的代码:全局数组不能在javascript函数中修改

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)); 
      } 
    }) 
} 
+0

因为你有一个异步调用,并且像ti一样是同步的。 – epascarello

+0

只需在'then'回调中放入'init'调用。 – Bergi

我还没有在所有的.map通话所发生的事情仔细地看了看,但麻烦的是可能是parsing没有被调用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(); 
     } 
    }) 
} 
+0

不要采取回调。使用你有的承诺,并将其退回! '解析()。然后(INIT)' – Bergi