事件处理程序中无法捕获的异常

时间:2017-04-06 20:04:20

标签: javascript javascript-events rxjs react-redux

我有一个小的Chrome扩展程序,将此行注入Netflix js:

netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null, {value: 123, pointerEventData: {playing: true}});

特别注意dragend[1]。在某些情况下,这样可以正常工作,而在其他情况下只有dragend[0]有效。如果dragend[1]有效,那么dragend[0]将抛出异常,反之亦然。当我围绕该行包装try / catch块时,它永远不会起作用。永远不会输入catch块,异常表面将返回浏览器。

如何捕获异常? (注意:我找不到与该行代码相关的任何属性值,这些属性值表明我应该使用0还是1。)似乎我唯一的希望是能够捕获异常,如果我尝试0并且它出错,然后尝试1,反之亦然。

错误信息通常是这样的:

  

无法读取属性'目标'为null

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您希望解耦逻辑,可以执行以下操作:

try {
  netflix.cadmium.UiEvents.events.resize[1]
    .scope.events.dragend[0].handler(null, {
      value: 123,
      pointerEventData: {
        playing: true
      }
    })
} catch(e) {
  netflix.cadmium.UiEvents.events.resize[1]
    .scope.events.dragend[1].handler(null, {
      value: 123,
      pointerEventData: {
        playing: true
      }
    })
}

说明:

  • 如果try导致错误,dragend[0]块将捕获异常
    • 在这种情况下catch阻止 无法抛出异常
  • 反之亦然,try块永远不会出现异常
    • 因此catch逻辑永远不会运行

编辑:承诺方式

这取决于处理程序的输出是否为 Promise 。如果是这样,那么你可以这样做:

const netflixHandler = idx => netflix.cadmium.UiEvents.events.resize[1]
  .scope.events.dragend[idx].handler(null, {
    value: 123,
    pointerEventData: {
      playing: true
    }
  })

netflixHandler(0) //Expecting a Promise
   .catch(_ => netflixHandler(1)) //If failed, then rectify, and continue the chain!
   .then(_ => /*Continue rest of the logic here*/)