草庐IT

javascript - Angular : Default handler for unhandled http errors

coder 2024-05-09 原文

在我的 angularjs 应用程序中,我以这种方式为 http 错误定义了一个默认处理程序:

myapp.config([ '$httpProvider', function($httpProvider) {
    $httpProvider.responseInterceptors.push('errorInterceptor')
}])

其中 errorInterceptor 是一项服务,它在当前页面顶部的警报字段中显示有关错误的一些详细信息。

现在,当我想以不同的方式处理特定错误时(假设查询是在模态中触发的,我想仅在此模态中而不是在页面级别显示警报):

$http.get('/my/request').then(success, specificErrorHandling)

Angular 执行了 specificErrorHandling 但仍然触发了我的 errorInterceptor,所以我的错误被报告了两次。有没有办法避免这种情况?

更一般地说,是否有一种 Angular 方法可以只处理 promise 链中尚未处理的错误,就像服务器应用程序的顶级错误处理程序没有处理的一样?不必处理捕获的异常?

编辑: 根据 Beetroot-Beetroot 在评论中的要求,这里是我的拦截器的代码:

@app.factory 'errorInterceptor', [ '$q', 'alertsHandler',
  ($q, alertsHandler) ->
    success = (response) ->
      response

    failure = (response) ->
        alertsHandler.raise(response)

    (promise) ->
      promise.then success, failure
]

最佳答案

我们有类似的东西。

如果我们处理 http 错误,我们会在请求上传递一个名为 errorHandled:true 的属性

$http({
    method: 'GET',
    url: '/my/url',
    errorHandled:true
}).then(function(){ ... }, function(){ ... });

然后在 responseError: function(rejection){ ... } 的拦截中,我们可以通过查看 rejection.config.errorHandled 来查看是否设置了此标志如果没有 - 然后我们弹出一个带有错误的 toastr 对话框。代码看起来像这样

function ( rejection ) { 
    if ( !rejection.config.errorHandled && rejection.data.message ){
        toastr.error(rejection.data.message, 'Error');
    }
    return $q.reject(rejection); 
} 

有人在不添加处理程序的情况下编写“errorHandled:true”的可能性很小。有 2 个错误指示器的机会也很小,因为我们已经习惯了 - 但实际上 2 个指示器总比没有好..

如果我们 promise 查询它是否有错误处理程序或不在 then 链下,那就太好了,但我们无法在任何地方找到它。

关于javascript - Angular : Default handler for unhandled http errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17257946/

有关javascript - Angular : Default handler for unhandled http errors的更多相关文章

  1. ruby-on-rails - 缺失区域;使用 :region option or export region name to ENV ['AWS_REGION' ] - 2

    我知道还有其他相同的问题,但他们没有解决我的问题。我不断收到错误:Aws::Errors::MissingRegionErrorinBooksController#create,缺少区域;使用:region选项或将区域名称导出到ENV['AWS_REGION']。但是,这是我的配置开发.rb:config.paperclip_defaults={storage::s3,s3_host_name:"s3-us-west-2.amazonaws.com",s3_credentials:{bucket:ENV['AWS_BUCKET'],access_key_id:ENV['AWS_ACCE

  2. ruby-on-rails - ActiveRecord 的 find_or_create* 方法是否存在根本性缺陷? - 2

    有几种方法:first_or_create_by、find_or_create_by等,它们的工作原理是:与数据库对话以尝试找到我们想要的东西如果我们找不到,就自己做保存到数据库显然,并发调用这些方法可能会使两个线程都找不到它们想要的东西,并且在第3步中一个线程会意外失败。似乎更好的解决方案是,创建或查找即:提前在您的数据库中创建合理的唯一性约束。如果你想保存一些东西,就保存它如果有效,那就太好了。如果它因为RecordNotUnique异常而无法工作,它已经存在,太好了,加载它那么在什么情况下我想使用Rails内置的东西而不是我自己的(看起来更可靠)create_or_find?

  3. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  4. ruby-on-rails - Rails 3 - 过滤器链暂停为 :authentication rendered or redirected - 2

    我仍然收到标题中的“错误”消息,但不知道如何解决。在ApplicationController中,classApplicationController在routes.rb#match'set_activity_account/:id/:value'=>'users#account_activity',:as=>:set_activity_account--thisdoesn'tworkaswell..resources:usersdomemberdoget:action_a,:action_bendcollectiondoget'account_activity'endend和User

  5. ruby-on-rails - Rails FasterCSV "unquoted fields do not allow\r or\n" - 2

    我在使用FasterCSV和我的rakedb:seeds迁移时遇到问题。我收到错误:“rake中止!未加引号的字段不允许\r或\n(第2行)”在以下seeds.rb数据上:require'csv'directory="db/init_data/"file_name="gardenzing020812.csv"path_to_file=directory+file_nameputs'LoadingPlantrecords'#Pre-loadallPlantrecordsn=0CSV.foreach(path_to_file)do|row|Plant.create!:name=>row[1

  6. ruby - OR 运算符和 Ruby where 子句 - 2

    可能真的很简单,但我很难在网上找到关于这个的文档我在Ruby中有两个activerecord查询,我想通过OR运算符连接在一起@pro=Project.where(:manager_user_id=>current_user.id)@proa=Project.where(:account_manager=>current_user.id)我是ruby​​的新手,但我自己尝试使用||@pro=Project.where(:manager_user_id=>current_user.id||:account_manager=>current_user.id)这没有用,所以1.我想知道如何在

  7. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

  8. ruby - 优雅的链式 'or' 用于测试 Ruby 中的相同变量 - 2

    怎样说才是明智的呢?if@thing=="01"or"02"or"03"or"04"or"05"(数字包含在数据类型字符串的列中。) 最佳答案 制作数组并使用.include?if["01","02","03","04","05"].include?(@thing)如果值真的都是连续的,你可以使用像(1..5).include?这样的范围对于字符串,你可以使用:if("01".."05").include?(@thing) 关于ruby-优雅的链式'or'用于测试Ruby中的相同变量,我

  9. ruby-on-rails - RSpec 应用程序助手测试 : Undefined local variable or method `helper` - 2

    有一段时间这似乎是一个闪烁的错误,但现在它一直出现:当我在一个相当简单的ApplicationHelper规范上运行RSpec时,我得到以下错误:%rspec--backtrace1)ApplicationHelperrendersMarkdownfromplaintextFailure/Error:expect(helper.md(plaintext)).toeq("Header\n")NameError:undefinedlocalvariableormethod`helper'for##/Users/danielsh/.rvm/gems/ruby-2.1.1@project-st

  10. Ruby 的 'or' 与 '||' - 2

    这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Differencebetween“and”and&&inRuby?Ruby:differencebetween||and'or'我有这段代码(类似这样的东西)foo=nilor4我希望foo成为第一个值(可以是nil)或默认值4。当我在irb中测试时,输出是我所期望的它是。愚蠢的我,我后来没有检查foo的值。一段时间后,我开始注意到我的代码中存在一些错误,直到我在irb中检查foo的值后我才发现问题,哦,令人惊讶的是,nil而不是预期的4。关于or与||的故事是什么?他们应该作为替代品工作吗?使用或代替||

随机推荐