[英]variable not available after for-loop inside Promise.then()
我在Promise.then()中使用包含if语句的for循环(它是一个api调用)。 在for循环之前初始化的变量在for循环中可用,但不在之后。
我在for循环之前,在for循环内部,if语句内部,if语句之后,以及for循环之后控制记录变量。 最后一个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
的有效索引是从0
到arr.length - 1
。
你的循环条件是i <= lines.length
,这意味着在最后一次迭代中i
的值为lines.length
。 然后, lines[i]
访问数组边界之外的元素,产生undefined
。
lineArray = line.split(' ')
然后抛出异常,因为undefined
不是对象而undefined.split
是一个错误。
这就是为什么循环之后的代码永远不会执行的原因。
试试i < lines.length
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.