方法a调用含有post请求的方法b,为什么不能获取方法b中的变量值?

1、方法createAnimation调用方法getToken,getToken中发送了post请求,并将返回来的参数赋值给data()中的变量token,但是在createAnimation中用this.token获取不到token的值

2、

createAnimation() {
    const t = this;
    this.viewDialog = true;
    this.viewTitle = this.anaInput;
    t.loading = true;
    t.getToken()
    // console.log(t.getToken());
    // this.$options.methods.getToken.bind(this)();
    console.log(222,t.token)
},

getToken() {
    // this.token='qqqq';
    this.$http.post(this.ip + '/getyoyatoken', { //获取token
        userid: this.user_id
    }).then((res) => {
        if (res.data.data.result === 1) {
            this.token = res.data.data.list[0].token;
            // return res.data.data.list[0].token;
            console.log(111,this.token)
        }
    })
},

clipboard.png

3.根据百度的用this.$options.methods.getToken.bind(this)();或者this.$options.methods.getToken();也不起作用,而且报错post undefined,我试了在getToken中直接给token赋值,在createAnimation中是可以获取到的。变量token的值确实被改变了,在createAnimation方法中拿不到,但是在执行完createAnimation后再执行其他发法是能获取到token的值的,我试了用setTimeout(()=>{this.getToken})也不行。如果直接让getToken把响应结果return回来,createAnimation中将接收的结果打印出来是undefined

4、请问这是什么原因呢?

5、补充:

async createAnimation() {
    const t = this;
    this.viewDialog = true;
    this.viewTitle = this.anaInput;
    t.loading = true;
    t.token = await t.getToken();
    console.log(222,t.token)
}

这样写也不能获取到token,因为多处调用到getToken方法,怎么可以简便点,不需要重复写getToken中那几行代码

阅读 2k
3 个回答

getToken是异步操作,执行时会等待返回。
console.log是同步的,并不会等待getToken执行完才执行,而是立即执行,由于getToken还未返回数据,所以就是undefined。
你打个断点跟一下,其实就明白了。

能不能靠谱点,你这http请求难道不是异步吗?能打印出来才怪呢

关于5.补充。
await的方法(getToken)应该返回一个Promise,不然getToken还是同步的

getToken() {
    // this.token='qqqq';
    return this.$http.post(this.ip + '/getyoyatoken', { //获取token
        userid: this.user_id
    }).then((res) => {
        if (res.data.data.result === 1) {
            this.token = res.data.data.list[0].token;
            // return res.data.data.list[0].token;
            console.log(111,this.token)
        }
        return Promise.resolve(this.token)
    })
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题