2017-08-23 47 views
0

我一直在這個問題上花費太多時間...所以我想聲明一個名爲「位置」的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

回答

-1

我還沒有在所有的.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