为什么我不能在vue js的异步方法中访问'this'作用域?[duplicate]

6rqinv9w  于 2023-01-26  发布在  Vue.js
关注(0)|答案(1)|浏览(266)
    • 此问题在此处已有答案**:

(13个答案)
How does the "this" keyword work, and when should it be used?(22个答案)
3天前关闭.

async sendPostMessageForExit() {
      try {
        this.$mNprogress.show();

        await this.$store.dispatch(user/logout");

        this.$mNprogress.hide();
        this.postMessageExit();
      } catch (error) {
        handleGeneralError(error);
        this.$mNprogress.hide();
        this.postMessageExit();
      }
    },

让自我=这个;我做的时候可以访问它,但我想知道为什么我不能直接访问它。

jxct1oxe

jxct1oxe1#

因为'this'没有绑定到函数。像这样定义的函数有一个动态作用域,这意味着它取决于你如何和在哪里调用它。我对Vue不是很熟悉,但我猜如果你从视图调用这个函数,它的'this'将引用那个作用域,而不是这个函数所属的类。
解决方案:
1.尝试使用arrow函数代替,它将具有Lexical作用域,即当您定义函数时。例如sendPostMessageForExit = async () => {...
1.将this绑定到类构造函数内部的函数(即sendPostMessageForExit = sendPostMessageForExit.bind(this)
1.像您一样使用const self = this

相关问题