async 和 await 是 ES2016/ es7 新增的兩個關鍵字, 它們借鑑了 ES2015 中生成器在實際開發中的應用。
目的是爲了簡化Promise api 的使用, 並非替代 Promise
async:目的是爲了簡化在函數的返回值中對Promise的創建
例如:
async function test() {
console.log(1);
return 2; // resolve
// throw reject
}
// 等效於
function test() {
return new Promise((resolve, reject) => {
console.log(1);
resolve(2);
})
}
await: 關鍵字必須出現在async函數中
await 等待的是thenable裏面成功的狀態
async function test() {
const result = await 1;
console.log(result);
}
// 等效於
function test() {
return new Promise((resolve, reject) => {
Promise.resolve(1).then(data => {
const result = data;
console.log(result)
resolve();
})
})
}
上面的那種方法處理的是promise的正常狀態,如何處理錯誤狀態呢?
function getRandom() {
if (Math.getRandom < 0.5) {
return 1;
} else {
throw 2;
}
}
async function test() {
try {
const result = await getRandom();
console.log("正常狀態", result);
} catch{
console.log("錯誤狀態",err)
}
}
/**
* @description: 使用promise 改造 計時器
* @param :
* @return:
*/
function delay(duration) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, duration);
})
}
es6 異步 之async await 學習總結
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.