全局数组不能在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));
}
})
}
答
我还没有在所有的.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
因为你有一个异步调用,并且像ti一样是同步的。 – epascarello
只需在'then'回调中放入'init'调用。 – Bergi