async,await是es7新增的api,比es6的promise更加優雅,但是最近在使用await時發現處理錯誤並不像promise這麼簡單,下面是簡單的應用示例。
首先,我們先模擬幾個非同步的操作
var p1 = function() , 2000)
})}
var p2 = function
() , 1000)
})}
var p3 = function
()
然後我們看使用es6的promise處理非同步操作並捕獲錯誤
//用promise控制執行流程
var test = function
() ).
catch(function
(e) )
}).catch(function
(e) )
} //用promise.all控制執行流程
var test1 = function
() ).
catch(function
(e) )
}
這樣寫可以很好地處理錯誤,但是並不美觀,所以我們要使用async,await,使其更像同步**
//用await來控制流程,看著比用promise控制要優雅簡介許多,但是並沒有處理錯誤
var test2 = async function
()
這樣確實優雅了很多,但是如何處理錯誤呢?我們用try,catch語句來捕獲錯誤
//用try,catch處理報錯,但是try catch用多了會影響效能,並且這樣寫也很不美觀
var test3 = async function
()
catch
(e)
}
try catch可以捕獲錯誤,但是這樣寫還是不夠美觀,並且用多了會有效能問題,所以我們就到了重點,今天的to方法
//使用async/await時處理報錯的方法
function
to(promise) ).
catch((err) =>);
}return promise.then(function
() ).
catch(err =>);
}
封裝的to方法,原理是用promise的then,catch方式捕捉錯誤並丟擲,使用方式是這樣的
//用to方法處理錯誤資訊,**也比較看著整潔易懂
var test4 = async function
() let [err2,res2] =await to(p2());
if(err2)
p3();
}
這樣**是不是優雅了很多,並且效能也好些。
async await(優勢在於處理then鏈)
await 可以認為是 async wait 的簡寫,await 用於等待乙個非同步方法執行完成。async await其實是promise的語法糖,它能實現的效果都能用then鏈來實現,它是為優化then鏈而開發出來的。從字面上來看,async是 非同步 的簡寫,await譯為等待,所以我們很好理...
async await處理非同步問題
在編寫網頁的時候我們常常會遇到非同步問題,async await是es6提出的解決非同步的方法,下面我們來看看這個方法怎麼實現解決非同步的,function foo 1000 console.log 2 答案肯定是2,1 因為settimeout是乙個非同步執行語句,所以下面乙個會先執行完後再執行非...
async await進行非同步處理
參考 await 只能出現在 async 函式中 async 函式返回的是乙個 promise 物件。async 函式 包含函式語句 函式表示式 lambda表示式 會返回乙個 promise 物件,如果在函式中return乙個直接量,async 會把這個直接量通過promise.resolve 封...