【问题标题】:Promise returns undefined value even though there is result即使有结果,Promise 也会返回未定义的值
【发布时间】:2019-11-12 11:09:00
【问题描述】:

我在 Vuejs 中有一个名为 getUsers 的方法,它接受数组并从数据库返回用户结果。

当我按照以下方式调用它时,它会工作并返回结果

this.getUsers(executives).then(
          result => {
            this.specifcExecs= result;
          });

但由于我需要使用 diff 输入调用 getUsers 15 次,所以我想制作一个通用方法来直接设置特定数组的值,如下所示。

this.specifcExecs = this.populateList(executives);

populateList(list){
      this.getUsers(list).then(
              result=> {
                  console.log("inside result in", result);
                  return result;
              }); 
    },

当我尝试打印 this.specifcExecs 时,我得到了未定义。有人可以告诉我我在这里做错了什么吗?我正在尝试了解如何以有效的方式解决承诺以防止代码重复。

【问题讨论】:

  • 这段代码会异步执行,回调中的返回不会返回到this.specificExec。所以为了实现这一点,在 Javascript 中使用 async 和 await 概念,它将使代码更具可读性并有助于以同步方式执行代码。

标签: javascript vue.js vuejs2 promise vue-component


【解决方案1】:

你不能从 Promise 中返回一个值,但你可以这样做:

  this.populateList(executives);

populateList(list){
      this.getUsers(list).then(
              result=> {
                  console.log("inside result in", result);
                  this.specifcExecs= result;
              }); 
    },

【讨论】:

  • 但请注意,您正在处理异步事物,因此如果您在执行 populateLists 后立即打印 specificExecs,则该方法可能尚未解决,您仍然会得到 undefined
  • @NathanPB 因为 Vue 是响应式的,所以没有问题,当它解决后你就会拥有价值
  • @BoussadjraBrahim,问题是列表每次都会不同。就像我通过调用此方法来填充 15 个不同的列表一样。因此,我正在尝试一种更有效的方法将其传递给另一种方法并使用它。有什么建议可以提高效率而不是在populateList 中设置this.specifcExecs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
相关资源
最近更新 更多