Создание файла для каждого ответа от вызова API с циклом FOR - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь создать файл для каждого ответа от вызова API с циклом for, но когда я пытаюсь использовать взаимодействие, выдается ошибка:

i не определен, даже если он определен, когда цикл использует его для выполнения вызовов API

function sysWrite(data){
  fs.appendFile(`${testArray[i}[1]}.json`, data, function(err){
    if(err) throw err;
  })
}

forLoop().then(function (resSet){
  for(i = 0; i < resSet.length; i++){
    (function(i){
      setTimeout(function(){
        axios.get(`https://api.census.gov/data/2016/acs/acs5?get=NAME,${resSet[i]}&for=state:*&key=${censusAPI}`)
        .then(function (response) {
          //problem place
          let replacedKey = Object.assign({}, response.data);
          let jsonData =  JSON.stringify(replacedKey).replace(testArray[i][0], testArray[i][1]);
          sysWrite(jsonData)
        })
        .catch(function (error) {
          console.log(error);
        });
      }, 100*i)
    })(i);
  }
})

1 Ответ

0 голосов
/ 30 апреля 2019

Проблема:

В функции 'sysWrite' функция ссылается на 'testArray [i] [1]', который не определен в текущем контексте.

Кроме того, функция 'sysWrite' содержит опечатку, в которой написано '${testArray[i}[1]}.json', должно быть ${testArray[i][1]}.json (Вы закрыли индекс массива фигурной скобкой вместо квадратной).

Простое объяснение:

Когда вы вызываете 'sysWrite', все ваши локальные переменные в этом контексте не существуют.

Вот хороший справочник, чтобы узнать о переменных: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var

Простое решение:

function sysWrite(name, data){
      fs.appendFile(`${name}.json`, data, function(err){
        if(err) throw err;
      })
    }

forLoop().then(function (resSet){
  for(i = 0; i < resSet.length; i++){
    (function(i){
      setTimeout(function(){
        axios.get(`https://api.census.gov/data/2016/acs/acs5?get=NAME,${resSet[i]}&for=state:*&key=${censusAPI}`)
        .then(function (response) {
          //problem place
          let replacedKey = Object.assign({}, response.data);
          let jsonData =  JSON.stringify(replacedKey).replace(testArray[i][0], testArray[i][1]);
          sysWrite(testArray[i][1], jsonData);
        })
        .catch(function (error) {
          console.log(error);
        });
      }, 100*i)
    })(i);
  }
})
...