async/await是基於promise實現的,他不能用於普通的**函式
async/await使得非同步**看起來像同步**
async/await與promise一樣,是非阻塞的。
const makerequest = () => )} else
})}
這些**看著就頭痛。巢狀(6層),括號,return語句很容易讓人感到迷茫,而它們只是需要將最終結果傳遞到最外層的promise。
上面的**使用async/await編寫可以大大地提高可讀性
:
const makerequest = async () => else}
const makerequest = () => )})}
如果promise3不需要value1,可以很簡單地將promise巢狀鋪平。如果你忍受不了巢狀,你可以將value 1 & 2 放進promise.all來避免深層巢狀:
const makerequest = () => ).then(([value1, value2]) => )
}
這種方法為了可讀性犧牲了語義。除了避免巢狀,並沒有其他理由將value1和value2放在乙個陣列中。
使用async/await的話,**會變得異常簡單和直觀
。
const makerequest = async () =>
const makerequest = () => )}makerequest()
.catch(err => )
promise鏈中返回的錯誤棧沒有給出錯誤發生位置的線索。更糟糕的是,它會誤導我們;錯誤棧中唯一的函式名為callapromise,然而它和錯誤沒有關係。(檔名和行號還是有用的)。
然而,async/await中的錯誤棧會指向錯誤所在的函式:
const makerequest = async () =>makerequest()
.catch(err => )
在開發環境中,這一點優勢並不大。但是,當你分析生產環境的錯誤日誌時,它將非常有用。這時,知道錯誤發生在makerequest比知道錯誤發生在then鏈中要好。
最後一點,也是非常重要的一點在於,async/await能夠使得**除錯更簡單。2個理由使得除錯promise變得非常痛苦:
使用await/async時,你不再需要那麼多箭頭函式,這樣你就可以像除錯同步**一樣跳過await語句。
promise與async和await的區別
什麼是async await?async await是寫非同步 的新方式,以前的方法有 函式和promise。async await是基於promise實現的,它不能用於普通的 函式。async await與promise一樣,是非阻塞的。async await使得非同步 看起來像同步 這正是它的魔...
promise與async和await的區別
什麼是async await?async await是寫非同步 的新方式,以前的方法有 函式和promise。async await是基於promise實現的,它不能用於普通的 函式。async await與promise一樣,是非阻塞的。async await使得非同步 看起來像同步 這正是它的魔...
promise 和 async 的用法
先構造乙個 promise 函式 resolve 和 reject 都是乙個函式 resolve 在成功時呼叫 reject 在失敗時呼叫 function promise 1000 else 1000 then 和 catch 第乙個引數為resolve狀態時的 第二個引數為reject狀態時的 ...