JS变量相互影响导致嵌套For循环出现问题



我想使用谷歌翻译api翻译一些json文件,这是一个Promise。

我写了一些代码如下,它只使用等待,意味着没有并发。

(async function (){
let file = fs.readdirSync(files);
let k = file.length;
for (let e=0;e<k;e++){
await tranAsync(baseOriginal,file[e],fromTo).then( some code );
}
})();
var material = some JSON object;
var fromTo =  {from: 'en', to: 'jp'};
async function tranAsync(material, fromTo){
let cm = ["vedio","audio"];
for (x in cm){
for (let i=0; i<material[cm[x]].length; i++){
material[cm[x]][i].description_ZH = await translate(material[cm[x]][i].description,fromTo); 
}
}
return material;
}

如果我在tranAsync Promise之前删除wait,意味着启用了并发,那么问题是:脚本将无法正常工作,一些翻译的材料将未定义。我尝试调试程序来找出原因,这似乎是因为变量I或其他一些变量相互影响。例如,如果脚本开始处理json文件-10,在第一个的循环x=audio中,实际上,文件-10.audio的长度是0,但即使i大于0,比如2,翻译行仍然可以工作,那么它会抛出一个错误,表明文件-10.aaudio[2].description是未定义的。

我是这个项目的初学者,这真的让我很失望。非常感谢你的帮助。它会救我的。

for (x in cm){更改为for (let x in cm){,这样您就不会意外地使用全局x,因为在对该函数的多次调用之间会被覆盖(因为这里有异步操作(。

更好的是,在循环中将其更改为for (let x of cm) {,然后将cm[x]更改为仅x

仅供参考,如果您在严格模式下运行代码,则会自动标记这种类型的错误。

最新更新