在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 方法a調(diào)用含有post請(qǐng)求的方法b,為什么不能獲取方法b中的變量值?

方法a調(diào)用含有post請(qǐng)求的方法b,為什么不能獲取方法b中的變量值?

1、方法createAnimation調(diào)用方法getToken,getToken中發(fā)送了post請(qǐng)求,并將返回來的參數(shù)賦值給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.根據(jù)百度的用this.$options.methods.getToken.bind(this)();或者this.$options.methods.getToken();也不起作用,而且報(bào)錯(cuò)post undefined,我試了在getToken中直接給token賦值,在createAnimation中是可以獲取到的。變量token的值確實(shí)被改變了,在createAnimation方法中拿不到,但是在執(zhí)行完createAnimation后再執(zhí)行其他發(fā)法是能獲取到token的值的,我試了用setTimeout(()=>{this.getToken})也不行。如果直接讓getToken把響應(yīng)結(jié)果return回來,createAnimation中將接收的結(jié)果打印出來是undefined

4、請(qǐng)問這是什么原因呢?

5、補(bǔ)充:

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,因?yàn)槎嗵幷{(diào)用到getToken方法,怎么可以簡(jiǎn)便點(diǎn),不需要重復(fù)寫getToken中那幾行代碼

回答
編輯回答
野橘

getToken是異步操作,執(zhí)行時(shí)會(huì)等待返回。
console.log是同步的,并不會(huì)等待getToken執(zhí)行完才執(zhí)行,而是立即執(zhí)行,由于getToken還未返回?cái)?shù)據(jù),所以就是undefined。
你打個(gè)斷點(diǎn)跟一下,其實(shí)就明白了。

2017年10月28日 04:07
編輯回答
不歸路

關(guān)于5.補(bǔ)充。
await的方法(getToken)應(yīng)該返回一個(gè)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)
    })
}
2018年2月4日 20:39
編輯回答
莫小染

能不能靠譜點(diǎn),你這http請(qǐng)求難道不是異步嗎?能打印出來才怪呢

2018年1月16日 07:55