javascript - 如何从 Promise 返回值并在另一个方法中使用它?

标签 javascript jquery ecmascript-6 promise es6-promise

我在类组件中有三个带有 promise 的方法。我需要在 getTranslate 中使用 setNewJsonAndGetTranslate 方法的返回值,但它什么也没返回

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);
      });
    });
  } 

最佳答案

这是因为您没有从 setNewJsonAndTranslate 返回任何内容。 返回异步调用:

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;
  }
}

关于javascript - 如何从 Promise 返回值并在另一个方法中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56458401/

相关文章:

javascript - 将内容动态添加到 Angular Promise 创建的元素中

javascript - 将外部 json 数据附加到 div 类别明智

javascript - 动态从 html 页面中删除 javascript

javascript - 单击添加行并从列表中选择1个选项时,我想获得总和值吗?

javascript - 如何从本地存储中的字符串中删除子字符串?

javascript - 按字段过滤对象数组

typescript - 如何为 SystemJS 导出 TypeScript 模块?

javascript - jQuery - 使用类遍历所有元素并改变它们的样式

javascript - jQuery 切换在 IE 中不起作用

javascript - 数组中的 "..."(三点)表示法是什么意思?