Javascript 变量未获取分配给它的信息

Javascript 变量未获取分配给它的信息,javascript,Javascript,当我使用此代码时,musicData显示为undefined,即使我将其设置为metaData。另外,我知道元数据中包含信息 let musicData; for(i = 0; i < queue.length; i++) { queueString += i + 1 + ": `" + queue[i] + "`\n"; mm.parseFile(config.MUSIC_DIR + queue[i]).then( metadata =&g

当我使用此代码时,
musicData
显示为
undefined
,即使我将其设置为
metaData
。另外,我知道
元数据
中包含信息

let musicData;
for(i = 0; i < queue.length; i++) {
  queueString += i + 1 + ": `" + queue[i] + "`\n";
  mm.parseFile(config.MUSIC_DIR + queue[i]).then( metadata => {musicData = metadata;});
  console.log(musicData);
}
让音乐CDATA;
对于(i=0;i{musicData=metadata;});
console.log(musicData);
}

如果尝试从for循环返回musicData变量,它总是显示未定义。 因此,很好地了解如何从for循环返回数据。 否则,请尝试在for循环中使用musicData变量

那样

for(i = 0; i < queue.length; i++) 
{
   let musicData;
   queueString += i + 1 + ": `" + queue[i] + "`\n";
   mm.parseFile(config.MUSIC_DIR + queue[i]).then( metadata => {musicData = metadata;});
   console.log(musicData);
}
for(i=0;i{musicData=metadata;});
console.log(musicData);
}

尝试使用包含等待的循环的

let musicData;
let index = 0;
(async () => {
  for (const element of queue) {
    index++;
    queueString += index + ": `" + element + "`\n";
    await mm
      .parseFile(config.MUSIC_DIR + element)
      .then((metadata) => (musicData = metadata));
    console.log(musicData);
  }
})();

这是否在异步函数中?如果是这样,您可以等待
mm.parseFile
。否则,您不能像这样将结果分配给
musicData
。这是否回答了您的问题?这会在Firefox中抛出一个错误:“uncaughtSyntaxerror:missing(在for之后)”为什么这样可以解决问题?原因是for循环有一个由布尔变量控制的退出点。它不需要返回语句,返回语句只用于函数体中。我之所以这样问,是因为
mm.parseFile
是一个承诺,所以它的
then
可以在
console.log(musicData)之后运行
。因此,我对解决问题的方法感到困惑。--(这就是问题被标记为重复的原因)