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