promise和async都是做異步處理的, 使異步轉為同步
1.promise
它和Promise誕生的目的都是為了解決“回調地獄”,
promise使用方法:
<button @click="testBtn()">點擊</button>
get(data) {
return new Promise((resolve, reject)=>{
if (data > 5) {
resolve(data);
} else {
reject("數據都是不大於5");
}
});
},
testF(num) {
console.log("=====", num)
},
// 調用
testBtn() {
this.get(6).then((num)=>{
this.testF(num);
});
this.get(3).then((num)=>{
this.testF(num);
});
}
2.async
async,會返回一個promise對象
如果async函數中是return一個值,這個值就是Promise對象中resolve的值;
如果async函數中是throw一個值,這個值就是Promise對象中reject的值。
async的使用方法:
async function imAsync(num) {
if (num > 0) {
return num // 這里相當於resolve(num)
} else {
throw num // 這里相當於reject(num)
}
}
imAsync(1).then(function (v) {
console.log(v); // 1
});
// 注意這里是catch
imAsync(0).catch(function (v) {
console.log(v); // 0
})
3.await
await不會單獨使用,他會和async一起使用, 如果直接使用await的話會不起作用,
await會暫停當前async函數的執行,等待后面的Promise的計算結果返回以后再繼續執行當前的async函數
使用場景:
在發起請求獲取數據的時候,如果個return返回數據, 這時就需要用到await
async test(){
const currentArr = []
await this.$axios
.get("/topsellerCategorys/", {
marketplaceID: item.value,
listname: "AnyDepartment"
})
.then(response => {
if (response && response.data) {
currentArr = response.data
);
}
})
.catch(error => {
this.loadingShow = false;
console.log(error);
});
if (this.fristCategory[0] && this.fristCategory[0].length) {
this.selectArr = [this.fristCategory[0][0].label]; //類目默認賦值
this.category = this.fristCategory[0][0].label; //選擇的類目命默認賦值
}
return currentArr
}
