为什么Promise里面的数据获取不到?

为什么Promise里面的数据获取不到?

代码如下:

  Login: function () {
      let res = this.$store.dispatch("getUserLogin", {
        phone: this.phone,
        password: this.password,
      });
      console.log(res);
      console.log("data数据:" + res.data);

这是getUserLogin方法的代码


  getUserLogin: async function (context, value) {
      console.log(" getUserLogin");
      let res = await getLogin(value);
      return res;
    },

img

既然getUserLogin放到vuex里面了,直接取vuex的数据不行吗?

getUserLogin: async function (context, value) {
                  return new Promise(reslove => {
                      console.log(" getUserLogin");
                      let res = await getLogin(value);
                      reslove(res)
                  })
            },

获取数据

 this.$store.dispatch("getUserLogin", {
        phone: this.phone,
        password: this.password,
  }).then(res => {
  console.log(res)
})

【以下回答由 GPT 生成】

问题的原因是在Login方法中,调用this.$store.dispatch方法触发了一个异步操作,而this.$store.dispatch方法返回的是一个Promise对象,调用者(Login方法)在没有等待异步操作完成就直接打印Promise对象,所以看不到异步操作的结果。

为了解决这个问题,可以使用await关键字来等待异步操作完成,然后再打印结果。

解决方案:

Login: async function () {
  let res = await this.$store.dispatch("getUserLogin", {
    phone: this.phone,
    password: this.password,
  });

  console.log(res);
  console.log("data数据:" + res.data);
}

上述代码将Login方法定义为异步函数,并使用await关键字等待异步操作完成。这样,在res赋值完成后,console.log打印的结果就是异步操作的结果。

请注意,为了使用await关键字,Login方法必须被声明为异步函数,并且getUserLogin方法也必须返回一个Promise对象。

这样更改后,在控制台上应该能够看到正确的结果。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^