gpt4 book ai didi

javascript - `return await promise` 和 `return promise` 之间的区别

转载 作者:IT王子 更新时间:2023-10-29 02:55:45 25 4
gpt4 key购买 nike

给出下面的代码示例,行为是否有任何差异,如果有,这些差异是什么?

返回等待 promise

async function delay1Second() {
return (await delay(1000));
}

返回 promise

async function delay1Second() {
return delay(1000);
}

据我了解,第一个是在异步函数中进行错误处理,错误会从异步函数的 Promise 中冒出。然而,第二个需要少一个滴答声。这是正确的吗?

此代码段只是一个返回 Promise 以供引用的常用函数。

function delay(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}

最佳答案

大多数时候,returnreturn await 之间没有明显的区别。 delay1Second 的两个版本具有完全相同的可观察行为(但根据实现的不同,return await 版本可能会使用稍微多一点的内存,因为中间的 Promise 可能会创建对象)。

但是,正如@PitaJ 指出的那样,有一种情况存在差异:如果 returnreturn await 嵌套在 try-catch block 。考虑这个例子

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 子句;因此,该函数将返回解析为字符串“已保存!”的 promise 。

然而,该函数的第二个版本确实直接返回被拒绝的 promise 而不在异步函数中等待它,这意味着catch 情况是被调用,调用者反而得到拒绝。

关于javascript - `return await promise` 和 `return promise` 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38708550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com