addLangs() всегда пуст

#angular #typescript #rxjs #ngx-translate

Вопрос:

Я пытаюсь заполнить addLangs() метод, который принимает массив строк из ngx-translate пакета.

Но каждый раз, когда я пытаюсь поместить данные, поступающие из службы, они всегда остаются пустыми.

Я перепробовал все, но не смог понять, почему это происходит. Это небольшой код, но все же чего — то не хватает. Но когда я пытаюсь заполнить жестко закодированный строковый массив, который успешно заполняется внутри него.

 this.userService.getLangauges().subscribe((s: Array<any> = []) => {
  s.forEach((e) => {
    this.languages.push(e.name);  
  });
});

console.log(this.languages);  // I can see all the languages in console here

// let s = [
//   "en",
//   "sv-SE",
//   "da-DA",
//   "de-DE"
// ]
this.translate.addLangs(this.languages); // this is coming as empty
 

Ответ №1:

Я вижу, что вы используете this.languages вне subscribe функции, что приводит this.translate.addLangs(this.languages); к тому, что она всегда выполняется перед тем, как вставлять языки, которые вы получаете, userService в свой languages массив.

Поэтому, чтобы решить эту проблему, вам нужно подождать, пока языки не переместятся в ваш languages массив, или просто переместите эту часть, чтобы она была внутри subscribe функции, как показано ниже:

 this.userService.getLangauges().subscribe((s: Array<any> = []) => {
    s.forEach((e) => {
        this.languages.push(e.name);
    });

    // here you have to call addLangs function.
    this.translate.addLangs(this.languages);
});