Javascript 捕获Vue操作中的所有异常

Javascript 捕获Vue操作中的所有异常,javascript,exception,promise,vue.js,vuex,Javascript,Exception,Promise,Vue.js,Vuex,在开发过程中,我错误地键入了一个新变量的名称。会引发异常,但如果在Vue操作中的承诺上下文中调用代码,则不会在控制台上记录此异常 假设Vue操作返回引发异常的承诺: export const debug = ({}) => { return new Promise((resolve, reject) => { throw 'MyError'; }); } 当调度调用该操作时,异常将被静默,并且从未在控制台上记录。确保报告问题的最佳方法是什么 一种明显

在开发过程中,我错误地键入了一个新变量的名称。会引发异常,但如果在Vue操作中的承诺上下文中调用代码,则不会在控制台上记录此异常

假设Vue操作返回引发异常的承诺:

export const debug = ({}) => {
    return new Promise((resolve, reject) => {
        throw 'MyError';
    });
}
调度
调用该操作时,异常将被静默,并且从未在控制台上记录。确保报告问题的最佳方法是什么

一种明显的方法是为每个
调度
(或每个操作)添加一个
捕获
,以记录错误:

// Each action
export const debug = ({}) => {
    return new Promise((resolve, reject) => {
        throw 'MyError';
    })
    .catch(err => {
        console.error(err);
    });
}

// Each dispatch
this.$store.dispatch('debug')
.catch(err => {
    console.error(err);
});
这种解决方案对于记录错误来说似乎很难。毕竟,这里的要点不是从错误中正常恢复,而是记录在Vuex操作上下文之外调用时将报告的内容

Vuex用发出
Vuex:error
消息的
catch
包装动作承诺(请参见Vuex
store.js
):

通用处理程序可以对
vuex:error
作出反应,但作为
存储,生产中不存在\u devtoolHook
,该解决方案似乎也不正确


处理在Vuex操作上下文中引发异常的承诺的最佳方法是什么?

您应该从该代码在控制台中获得一个
未经处理的拒绝。您使用的promise库或浏览器是什么?Chromium版本56.0.2924.76构建在Ubuntu上,运行在package.json中的Ubuntu 16.10(64位)上。promise^7.1.1Try native promises。或者在这里看看如何解除他们的沉默:谢谢@Bergi,这非常有用。
function registerAction (store, type, handler, local) {
  const entry = store._actions[type] || (store._actions[type] = [])
  entry.push(function wrappedActionHandler (payload, cb) {
    let res = handler({
      dispatch: local.dispatch,
      commit: local.commit,
      getters: local.getters,
      state: local.state,
      rootGetters: store.getters,
      rootState: store.state
    }, payload, cb)
    if (!isPromise(res)) {
      res = Promise.resolve(res)
    }
    if (store._devtoolHook) {
      return res.catch(err => {
        store._devtoolHook.emit('vuex:error', err)
        throw err
      })
    } else {
      return res
    }
  })
}