翻閱古今
2019-03-19 17:19:11
寫了一個函數(shù) 返回?cái)?shù)據(jù),Vue.prototype.$http = axiosVue.prototype.getData = function(url){ let _data =''; this.$http.get(url).then(res=>{ _data = res.data; }); return _data;}這樣獲取不到數(shù)據(jù),返回的還是空。不知道怎么解決,或有什么辦法可以對axios設(shè)置同步。我是想這樣直接獲取數(shù)據(jù)this.list = this.getData(url);或者data的時候,直接返回?cái)?shù)據(jù)data:function(){return this.getData(url);}
4 回答

拉丁的傳說
TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個贊
用 async await 可以達(dá)到局部的同步寫法
Vue.prototype.getData = function(url){
return this.$http.get(url).then(res=>res.data);
}
//調(diào)用
this.getData('url').then(res=>{
console.log(res)
})
//async
async function(){
var data = await this.getData(url);
console.log(data);
}

料青山看我應(yīng)如是
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個贊
這是典型的異步場景。因?yàn)閿?shù)據(jù)在服務(wù)器上,正常的下載需要數(shù)秒不等的時間,為了不影響用戶的正常使用,所以會進(jìn)入異步流程,所以你直接取是取不到的。
解決方案樓上說的基本都對。目前通用的解決方案是使用 Promise,我剛好做過一次關(guān)于 Promise 的講堂:Promise 的 N 種用法。推薦你看一下。
添加回答
舉報(bào)
0/150
提交
取消