Javascript 在for循环内部Promise.then()之后变量不可用

Javascript 在for循环内部Promise.then()之后变量不可用,javascript,for-loop,asynchronous,scope,Javascript,For Loop,Asynchronous,Scope,我正在使用一个for循环,它在Promise.then()中包含一个if语句(这是一个api调用)。在for循环之前初始化的变量在for循环中可用,但在for循环之后不可用 我已经在for循环之前、for循环内部、if语句内部、if语句之后和for循环之后记录了console.log变量。最后一个console.log甚至不是未定义的。它似乎根本就没有注册 我曾在Chrome控制台中尝试过相同基本结构的简单版本,但效果不错,但不同之处在于,在Chrome控制台中,我没有承诺。then()。所以我

我正在使用一个for循环,它在Promise.then()中包含一个if语句(这是一个api调用)。在for循环之前初始化的变量在for循环中可用,但在for循环之后不可用

我已经在for循环之前、for循环内部、if语句内部、if语句之后和for循环之后记录了console.log变量。最后一个console.log甚至不是未定义的。它似乎根本就没有注册

我曾在Chrome控制台中尝试过相同基本结构的简单版本,但效果不错,但不同之处在于,在Chrome控制台中,我没有承诺。then()。所以我觉得有些事情我不明白

$(document).ready(function() {
  const url = 'https://www.ndbc.noaa.gov/data/realtime2/46029.spec';
  const newBouyData = new BouyData();

  let currentBouyData = newBouyData.getBouyData(url);
  currentBouyData.then((text) => {
    const today = new Date();
    let lineDate;
    let line;
    let lineArray;
    const lines = text.split('\n');
    let currentData;

    for (let i = 2; i <= lines.length; i++) {
      line = lines[i];
      lineArray = line.split(' ');
      lineDate = new Date(lineArray[0], lineArray[1] - 1, lineArray[2]).toLocaleDateString();

      if ( today.toLocaleDateString() === lineDate && today.getHours() === parseInt(lineArray[3]) ) {
        currentData = lineArray;
      }
    }
    console.log('currentData after: ', currentData);
. . .
$(文档).ready(函数(){
常量url=https://www.ndbc.noaa.gov/data/realtime2/46029.spec';
const newBouyData=新的BouyData();
让currentBouyData=newBouyData.getBouyData(url);
currentBouyData.then((文本)=>{
const today=新日期();
让lineDate;
让线;
让线性排列;
常量行=text.split('\n');
让当前数据;

for(设i=2;i
for(let i=2;我尝试将let更改为var。这可能是因为变量currentData和其他变量不在for循环的范围内。让我知道这是否有效。在for循环中添加console.log并调试您的浏览器控制台。如果
console.log
未运行,则承诺的
然后
回调未启动。控制台可能会有错误。还要考虑添加一个<代码> catch <代码>回调。你不介意为什么在控制台中没有错误?@ SkigiZimbim-你可能有一个<代码>代码中的catch < /代码>块。你没有显示它。循环101。我知道我缺少一些简单的东西。或者至少希望如此。谢谢。JAROMANDAX是的,因为它没有被执行。se前面抛出了一个异常。@JaromandaX是的,但OP没有提到或询问任何异常。只是
console.log
output。你从哪里得到的OP没有发现错误?我不再麻烦了
for (let i = 2; i <= lines.length; i++) {
  line = lines[i];
  lineArray = line.split(' ');
  ...
}
console.log('currentData after: ', currentData);