gpt4 book ai didi

javascript - 是否有一种更简洁的方式来获取 Promise 的错误和结果

转载 作者:行者123 更新时间:2023-12-04 07:39:57 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Correct Try…Catch Syntax Using Async/Await

(4 个回答)


4 个月前关闭。




我想知道我们是否可以在异步函数内部没有 try/catch 块的情况下获得 Promise 的错误和结果。

(async function(){
let { user, error } = await getUser();
.
.
.
{ user, error } = await user.save();
})();
在不使用 try/catch 块或 .then().catch() 的情况下,是否有更简洁的 Promise 错误处理方法?

最佳答案

怎么比这个干净?

async function updateUser() {
const user = await getUser();
.
.
.
const result = await user.save();
return result;
// or
// return user.save();
}
如果出错,则是 updateUser() 的调用者知道它是否应该处理它以及它应该做什么。如果调用者不知道要做什么,那么调用者也会返回一个 promise (通过 asyncawait 调用 updateUser() 或返回由 updateUser() 返回的 promise ) ,并且不需要执行错误处理。
最终,您将到达调用堆栈中的一个框架,该框架知道如何处理错误,在这种情况下,它会为等待的任何可能被拒绝的 promise 执行错误处理。如果没有,那么您可能已经从框架或程序的入口点到达回调,这可能会将错误传播为未处理的 promise 拒绝。
在 promise 之前,还有 callbacks ,并且需要大量的纪律才能不写这样的所有内容:
function updateUser(callback) {
getUser(function (error, user) {
if (error) {
return callback(error);
}

user.save(function (error, result) {
if (error) {
return callback(error);
}

callback(null, result);
// or
// callback(error, result);
});
// or
// user.save(callback);
});
}
请注意,即使不知道如何处理错误的回调也必须显式地执行错误处理,这就是 promise 少如此糟糕的原因之一。有人可能会指出,您可以通过将每个回调提取到一个命名函数中来使其更清晰,从而在视觉上使递归变平,但即便如此,每个回调仍然必须执行错误处理。
然后promise出现了,每一帧的显式错误处理问题最终消失了:
function updateUser() {
return getUser().then(user => {
return user.save();
}).then(result => {
return result;
});
// exposition only
}

关于javascript - 是否有一种更简洁的方式来获取 Promise 的错误和结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67541321/

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