promise 和 async await比較

 

async搭配await是ES7提出的,它的實現是基於Promise。這裏使用它對比Promise的用法,這裏只是簡單的適合平常業務的使用場景。
 
async、await是ES7中的提案,經過同步方式的寫法,使得代碼更容易閱讀。
 
注意:await函數不能單獨使用,並且async函數返回的是一個Promise對象,可使用then函數添加回調函數。當函數執行的時候,一旦遇到await函數就會先返回一個Promise對象,等到異步操做完成,再去執行後面的語句。若是 await 後面的異步操做出錯,那麼等同於 async 函數返回的 Promise 對象被 reject!
Promise是ES6的新特性,用於處理異步操做邏輯,用過給Promise添加then和catch函數,處理成功和失敗的狀況,下面就兩種狀況介紹異步,剛剛入門把本身的理解寫出來沉澱一下。
 
function timeout(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
})
}
// 調用函數
async function asyncPrint(value, ms) {
await timeout(ms);
console.log(value);
}
// 調用函數
asyncPrint('timeout', 2000); // 2s以後打印出'timeout',若是不相信可使用vscode編輯器的run code插件,會把執行時間展現給你!
 
下面是Promise的實現一樣的功能
function timeout1(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
})
}
 
// 由於上面函數返回是的Promise對象,因此直接使用鏈式方法then時,是在Promise對象內的函數執行完以後執行的,這樣就能夠達到上面一樣的結果
timeout1(5000).then(() => {
console.log('timeout1'); // 5s以後打印出'timeout1'
})
這裏多囉嗦兩句,即便咱們的設定的延時器的時間是2s和5s,可是真的跑出來的時間其實會多於2s和5s,這是由於執行其餘的代碼也會浪費時間啊,只是咱們的感知不強而已,並且這是沒辦法避免的。即便你寫的時間間隔爲0,它也不會實現理想狀況下的當即執行,緣由就是剛剛說的那樣。
 
我的喜歡async和await的寫法,主要是閱讀代碼的時候更加語義化,看着舒服。並且看到一些權威文章上也推薦async 、await 去處理異步狀況,(原畫:async函數能夠說是目前異步操做最好的解決方案)。😊
相關文章
相關標籤/搜索