【发布时间】:2019-03-23 04:47:36
【问题描述】:
我在 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。
我错过了什么?
感谢您的意见。
【问题讨论】:
-
尝试将 let 更改为 var。可能是因为currentData等变量不在for循环的范围内。让我知道这是否有效。
-
在for循环中添加console.log并调试
-
检查您的浏览器控制台。如果
console.log没有运行,那么promise 的then回调没有触发。控制台可能有错误。还可以考虑添加一个catch回调。 -
你不在乎为什么控制台没有错误?
-
@skillitzimberg - 您可能在未显示的代码中有
.catch块
标签: javascript for-loop asynchronous scope