鉴于下面的代码示例,行为是否有任何差异?如果有,这些差异是什么?
return await promise
async function delay1Second() {
return (await delay(1000));
}
return promise
async function delay1Second() {
return delay(1000);
}
据我了解,第一个将在异步函数内进行错误处理,并且错误将从异步函数的 Promise 中冒出。然而,第二个需要少一个刻度。它是否正确?
这段代码只是一个返回 Promise 的常用函数,供参考。
function delay(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
大多数时候,两者之间没有明显的差异return
and return await
。两个版本delay1Second
具有完全相同的可观察行为(但取决于实现,return await
版本可能会使用稍多的内存,因为中间Promise
可能会创建对象)。
然而,正如 @PitaJ 指出的,在一种情况下存在差异:如果return
or 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!'
}
}
在第一个版本中,async 函数在返回其结果之前等待被拒绝的 Promise,这会导致拒绝变成异常,并且catch
待达成的条款;因此,该函数将返回一个解析为字符串“Saved!”的承诺。
然而,该函数的第二个版本确实直接返回被拒绝的承诺无需在异步函数中等待它,这意味着catch
情况是not拨打电话,但呼叫者却遭到拒绝。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)