3 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個贊
在大多數(shù)情況下,return和之間沒有可觀察到的差異return await。這兩個版本的delay1Second觀察行為完全相同(但根據(jù)實(shí)現(xiàn)的不同,該return await版本可能會使用更多的內(nèi)存,因?yàn)镻romise可能會創(chuàng)建一個中間對象)。
但是,正如@PitaJ指出的,在一種情況下存在差異:如果returnor return await嵌套在try- catch塊中??紤]這個例子
async function rejectionWithReturnAwait () {
try {
return await Promise.reject(new Error())
} catch (e) {
return 'Saved!'
}
}
async function rejectionWithReturn () {
try {
return Promise.reject(new Error())
} catch (e) {
return 'Saved!'
}
}
在第一個版本中,異步函數(shù)在返回結(jié)果之前等待被拒絕的承諾,這將導(dǎo)致拒絕變成異常并到達(dá)catch子句。因此,該函數(shù)將返回一個解析為字符串“ Saved!”的promise。
但是,該函數(shù)的第二個版本確實(shí)直接返回了被拒絕的承諾,而無需在async函數(shù)中等待它,這意味著不調(diào)用該catch案例,而是由調(diào)用者獲取拒絕。

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個贊
這是一個很難回答的問題,因?yàn)樵趯?shí)踐中,這取決于您的編譯器(可能babel
)實(shí)際渲染的方式async/await
。清楚的是:
盡管第一個實(shí)現(xiàn)的鏈中可能少一個,但兩個實(shí)現(xiàn)的行為應(yīng)相同
Promise
。特別是如果您刪除了不必要的
await
,則第二個版本將不需要編譯器提供任何額外的代碼,而第一個版本則需要。
因此,從代碼性能和調(diào)試的角度來看,第二個版本是可取的,盡管只是略微如此,而第一個版本具有一點(diǎn)易讀性,因?yàn)樗宄乇砻魉祷亓顺兄Z。
添加回答
舉報