3 回答

TA貢獻1155條經(jīng)驗 獲得超0個贊
在引擎蓋下,async / await就是承諾。
也就是說,當你有一些看起來像這樣的代碼時:
const result = await myAsyncFunction(); console.log(result):
這和寫作完全一樣:
myAsyncFunction().then(data => { const result = data; console.log(result); });
之所以 - 你不應該混合async / await和.then
鏈 - 是因為它令人困惑。
最好選擇一種風格,并堅持下去。
當你選擇一個時 - 你也可以選擇異步/等待 - 這更容易理解。

TA貢獻1891條經(jīng)驗 獲得超3個贊
我被告知等待一個承諾鏈會破壞我的代碼中的東西。
不一定,你的兩個代碼片段確實工作相同(只要someFunction()
真正返回一個promise)。
使用哪一個有什么關系。第一個片段引入了哪個危險,第二個片段沒有?
理解和維護起來比較困難,混合不同風格會令人困惑。混亂導致錯誤。
考慮您需要在調用位置添加另一個promise console.log()
調用,甚至是函數(shù)的條件返回。你可以await
像在函數(shù)中的其他地方一樣使用回調,你需要回調return
的結果then
,甚至可以return
從外部函數(shù)?所有這些問題甚至都沒有出現(xiàn)在第一個片段中。雖然它們可以很容易地回答您的玩具示例,但在實際代碼中可能并不那么容易,而且控制流程更加復雜和嵌套。
所以你應該更喜歡更簡潔和干凈的。粘到await
對一致性,避免then
在async function
小號1。

TA貢獻1804條經(jīng)驗 獲得超7個贊
如果你的then
代碼返回了一個promise而不是調用console.log
,那么你的第一個例子就是await
,但你的第二個例子不會。
當您使用時async/await
,您將在try/catch
塊中捕獲您的拒絕。您的代碼將更少嵌套和更清晰。
使用then
通常會導致更多嵌套,并且更難以閱讀代碼。
await
無論是否返回,你都可以做任何事情promise
。有時這種未來證明調用一種方法可能有一天會變得異步或只返回一個承諾而不聲明異步。
缺點是復雜性,性能和兼容性,所有這些都與收益相比顯得蒼白無力。
我發(fā)現(xiàn),如果你在調用函數(shù)后依賴函數(shù)的返回值,它是或者最終會異步,那么裝飾調用你的函數(shù)await
會讓你心滿意足,無論它是當前的異步還是返回一個promise。
添加回答
舉報