在大多数情况下,
return和之间没有可观察到的差异
returnawait。这两个版本的
delay1Second观察行为完全相同(但根据实现的不同,该
returnawait版本可能会使用更多的内存,因为
Promise可能会创建一个中间对象)。
但是,正如@PitaJ指出的,在一种情况下存在差异:如果
returnor
returnawait嵌套在
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!' }}在第一个版本中,异步函数在返回结果之前等待被拒绝的承诺,这将导致拒绝变成异常并到达
catch子句。因此,该函数将返回一个解析为字符串“Saved!”的promise。
但是,该函数的第二个版本确实直接返回了被拒绝的承诺,而无需在async函数中等待它,这意味着不调用该
catch案例, 而是由调用者获取拒绝。



