第一次尝试时未捕获Restangular错误

时间:2018-02-28 22:55:49

标签: javascript angularjs coffeescript restangular toastr

我一直试图绕过这个问题2天,我被卡住了......

当我用我认为错误的数据调用我的api(在@bulkValidate函数中)时,Restangular正在跳过我的错误处理程序而只是默默地失败。然后,如果我尝试再次传递相同的数据,或者在它按预期工作后的任何时间传递相同的数据,并正确显示错误的Toast。我可以在网络中看到在任何一种情况下从api发送完全相同的400消息,所以我知道它正常工作。

在浏览了SO帖子之后,我发现true让我的错误传递给我的自定义错误处理程序,所以当我给这个函数一个Error: [$sce:itype] Attempted to trust a non-string value in a content requiring a string: Context: html值时,我现在收到此消息的错误:

<br/>

我认为这是由catch我在输入toastr消息引起的,但即使我删除它也会发生,并且第一个错误仍然没有被@bulkValidate = -> # Checked items live in approval_list if approval_list.length > 0 orchestration.bulk_validate approval_list, host .then (res)-> helper.displayToast 'success', 'Success', 'The selected categories have been scheduled for publishing.' $scope.$broadcast 'refresh_queue' .catch (err)-> console.log(err) if err.status == 400 msg = '' for onemsg in err.data.errors if msg.length > 0 then msg = msg + '<br/><br/>' msg = msg + onemsg if err.data.num_validated != undefined num_validated = err.data.num_validated errorMsg = num_validated + ' categories have been scheduled for publishing<br/><br/>. Some categories could not be published due to validation errors: <br/><br/>' + msg helper.displayToast 'error','Error', errorMsg, {timeOut: 120000, showDuration: 12000} else helper.displayToast 'error','Error', 'No categories were published due to validation errors: ' + msg, {timeOut: 120000, showDuration: 12000} 抓住,无论如何。我也尝试按照this post中的指示将错误消息包装在$ sce.trustAsHtml中,但我仍然收到错误消息。

@receiver(post_save, sender=Activity,   dispatch_uid="create_feed_receiver")

非常感谢任何帮助或建议!

1 个答案:

答案 0 :(得分:0)

好的,我终于搞清楚了。似乎我的错误被另一个处理程序中的Restangular.setErrorInterceptor捕获到了user.auth组件的链中。

Restangular.setErrorInterceptor (response, deferred, responseHandler)->
  if response.status == 403
    helper.displayToast 'error', null, response.data.detail
    if isClient() then $state.go 'sites_list'
    else $state.go 'clients'
  if response.status == 400
    if response.config.data?.clone_category_id
      modalService.open 'error-list', ()->
        md = this
        md.button =
          text: [
            'Okay'
          ],
          active: 0
        if typeIsArray(response.data)
          msgs = ''
          for item in response.data
            if msgs.length > 0
              msgs += ", "
            msgs += item
          md.message = msgs
        else
          md.message = response.data

        @close = ->
          modalService.close()
        return
    else
      helper.displayToast 'error', null, response.data
  if response.status == 500 or response.status == -1
    helper.displayToast 'error', null, "There was an error processing your request"
  return true

return

我的400错误在这种情况下没有response.config.data.clone_category_id所以它被传递给else,因此它被发送到带有response.data的toastr助手(在这种情况下是一个对象而不是像预期的那样的一串错误。这就是为什么第一个错误是[$ sce:itype]错误。我将此else if添加到条件中,它允许错误传递给各自的处理程序并修复问题。

else if response.data?.errors
  # pass errors to their respective handlers
  return