переменная недоступна после цикла for внутри Promise.then () - PullRequest
1 голос
/ 23 марта 2019

Я использую цикл for, содержащий оператор if внутри Promise.then () (это вызов API).Переменная, инициализированная до цикла for, доступна в цикле for, но не после.

Я console.logged переменная перед циклом 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.

Чего мне не хватает?

Спасибо за ваши мысли.

1 Ответ

3 голосов
/ 23 марта 2019
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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...