gpt4 book ai didi

javascript - promise 错误/异常处理设计

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:56:47 25 4
gpt4 key购买 nike

我想创建一个执行异步操作并返回 promise 的函数。 Action 是:

  • 通过 AJAX 下载外部内容
  • 如果内容无法下载(例如 URL 无效)-> 拒绝
  • 如果内容下载成功,但我无法解析它 -> 拒绝
  • 否则(内容已成功下载和解析)-> 解决

我现在得到的代码非常简单:

function fetch(hash){
return $.ajax({
method: "GET",
url: baseURL + "/gists/" + hash
}).then(function(response) {
return JSON.parse(response.files['schema.json'].content);
});
}

它只是一个从 github gist 获取数据的 jQuery AJAX 调用。目前:

  • 当 AJAX 无法解析时 -> promise 被拒绝 - OK
  • 当 AJAX 被解析并且内容被正确解析时 -> promise 被解析 - OK
  • 但是,如果 AJAX 已解析,但内容无效,则 JSON.parse 行会抛出错误并且 promise 不会被拒绝 它应该 - 失败

问题是 - 这样做的正确设计是什么?我可以用 Deferred 包装整个事情并手动处理它,但我认为可能有更简单的解决方案。我应该试一试吗?还是别的?

最佳答案

I could wrap entire thing with a Deferred and handle it manually

这听起来像 deferred antipattern .不要包装任何已经使用 promises 的东西。

I think there might be an easier solution. Should I do a try-catch?

是的:

.then(function(response) {
try {
return JSON.parse(response.files['schema.json'].content);
} catch (e) {
return $.Deferred().reject(e);
}
})

另见 Throwing an Error in jQuery's Deferred object .

Or something else?

实际上,您的原始代码在任何合理的 promise 实现中都可以正常工作,其中异常会隐式地变成拒绝。就是jQuery's fail .您可能只想 dodge jQuery's then implementation .

关于javascript - promise 错误/异常处理设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38684359/

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