сохранить массив в глобальную переменную angular - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь сохранить value синтаксического анализа array в глобальном array. но глобальный array показывает мне undefined

  dataUrl: string = "assets/data.csv";
  private data:[];
dataInit(){
    this.papa.parse(this.dataUrl, {
      download: true,
      complete: (result) => {
        // result.data.push(this.data);
        this.data = result.data
        // console.log(result.data, "inside parser");
        // console.log(this.data, "global array");
      }

    });
  }
  ngOnInit() {
    this.dataInit();
    console.log(this.data, "inside onInit");
}

Консоль

undefined "inside onInit"

Ответы [ 5 ]

1 голос
/ 01 ноября 2019

Для этого есть две причины -

  1. Вам нужно инициализировать переменную следующим образом: private data: Array<any>= [];
  2. Вы связываете значение в асинхронном методе и утешаете значение синхроннопуть.
1 голос
/ 01 ноября 2019

Данные будут доступны внутри complete callback. Так что console.log(this.data) там.

Причина: complete - это метод обратного вызова, который работает асинхронно.

dataUrl: string = "assets/data.csv";
data = [];
dataInit(){
    this.papa.parse(this.dataUrl, {
      download: true,
      complete: (result) => {
        // result.data.push(this.data);
        this.data = result.data            
        console.log(this.data);
      }

    });
  }
  ngOnInit() {
    this.dataInit();
}
0 голосов
/ 01 ноября 2019

Поскольку функция this.papa.parse является асинхронной, вы не можете получить значение переменной данных сразу после вызова dataInit ... лучше делать внутри полного обратного вызова

dataUrl: string = "assets/data.csv";
private data:[];
dataInit() {
  this.papa.parse(this.dataUrl, {
    download: true,
    complete: (result) => {
      this.data = result.data
      this.toDo();
    }
  });
}

ngOnInit() {
  this.dataInit();
}

toDo(){
  console.log(this.data, "global array");
}
0 голосов
/ 01 ноября 2019

Поместите журнал консоли в полную функцию асинхронного кода.

Поскольку код загрузки papa.parse является асинхронным, в журнале консоли будет показано начальное значение data, поскольку результаты не готовыеще.

0 голосов
/ 01 ноября 2019

Измените инициализацию свойства данных на что-то вроде

private data = [];

Или

private data: Array<T> = []

Вместо T введите свой массив соответственно

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