this.$models.a('xxx').then(res=>{
if(res.status.retcode === 0){
return res.data
}})
複製代碼
調用函數a(),let result = a()
,獲得的值是undefined,由於請求是異步的,在獲取到請求結果以前已經return了。bash
傳統方式就是給a傳一個回調函數,在回調函數裏處理其餘業務邏輯,即異步
this.$models.a('xxx', data).then(res=>{
if(res.status.retcode === 0){
if(cb) cb()
}})
複製代碼
有了Promise以後,能夠新建一個Promise函數,獲得一個返回值,async
a() {
// 其實$models返回的就是一個Promise,也能夠直接return this.$models...,可是爲了舉例子方便,再也不修改。
return new Promise(resolve => {
this.$models.a('xxx').then(res=>{
if(res.status.retcode === 0){
resolve(res.data)
} else {
resolve([])
}
})
})
}
複製代碼
a().then(data => {
console.log(data) // 這個data就是resolve以後的數據
})
複製代碼
要實現相似的功能,還能夠選擇generator或者async,省去generator不談,記錄一下async的實現方法。函數
a() {
return new Promise(resolve => {
this.$models.a('xxx').then(res=>{
if(res.status.retcode === 0){
resolve(res.data)
} else {
resolve([])
}
})
})
}
複製代碼
async function b() {
let data = await a();
console.log(data)
....
}
b()
複製代碼