Как вернуть значение из обещания и использовать его в другом методе? - PullRequest
0 голосов
/ 05 июня 2019

У меня в компоненте класса три метода с обещаниями. И мне нужно использовать возвращенное значение из метода setNewJsonAndGetTranslate в getTranslate, но ничего не возвращается

getTranslate(key) {
    return this.setNewJsonAndGetTranslate(key); //<-- I get undefined, because nothing returned from Promise
  }

  setNewJsonAndGetTranslate(key) {
    this.setJson().then(json => {
      let translate = TranslateService.jsonPathToValue(json, key);
      let result = JSON.stringify(translate[this.user.getLangCode()]);
      if (result !== undefined) {
        return result.substring(1, result.length - 1); //<-- I'm need to return this
      } else {
        return key;
      }
    });
  }


  setJson() {
    return new Promise((resolve, reject) => {
      $.getJSON(Environment.prefixPath + "assets/i18n.json", json => {
        let translate = JSON.stringify(json);
        window.localStorage.setItem("translate_json", translate);
        resolve(json);
      });
    });
  } 

1 Ответ

3 голосов
/ 05 июня 2019

Это потому, что вы ничего не возвращаете с setNewJsonAndTranslate.return асинхронный вызов:

return this.setJson().then(json => {...});

Вы также можете использовать функцию async и await асинхронный код:

async setNewJsonAndGetTranslate(key) {
  let json = await this.setJson();
  let translate = TranslateService.jsonPathToValue(json, key);
  let result = JSON.stringify(translate[this.user.getLangCode()]);
  if (result !== undefined) {
    return result.substring(1, result.length - 1); //<-- I'm need to return this
  } else {
    return key;
  }
}
...