我一直试图绕过这个问题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")
非常感谢任何帮助或建议!
答案 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