gpt4 book ai didi

javascript - Promise.then() 内的 for 循环后变量不可用

转载 作者:行者123 更新时间:2023-11-30 11:06:44 25 4
gpt4 key购买 nike

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

我已经在 for 循环之前、for 循环内部、if 语句内部、if 语句之后和 for 循环之后对变量进行了 console.logged。最后一个 console.log 甚至没有出现未定义的情况。它似乎根本没有注册。

我已经在 Chrome 控制台中尝试了相同基本结构的简单版本并且它有效,但不同之处在于,在 Chrome 控制台中我不在 Promise.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);
. . .

我期望 currentData 是一个字符串数组。我一无所获。甚至没有 console.log。

我错过了什么?

谢谢你的想法。

最佳答案

for (let i = 2; i <= lines.length; i++) {
line = lines[i];
lineArray = line.split(' ');
...
}
console.log('currentData after: ', currentData);

数组的有效索引 arr来自0arr.length - 1 .

你的循环条件是i <= lines.length , 表示在最后一次迭代中 i值为 lines.length . lines[i]然后访问数组边界之外的元素,产生 undefined .

lineArray = line.split(' ')然后抛出异常,因为 undefined不是对象并且 undefined.split是一个错误。

这就是为什么循环后的代码永远不会执行的原因。

尝试 i < lines.length .

关于javascript - Promise.then() 内的 for 循环后变量不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55310693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com