Redux全局错误处理程序

时间:2017-07-25 17:55:49

标签: error-handling redux

我在节点上运行redux。要处理异步操作,例如读取文件或目录列表,我将redux-thunk与Promises结合使用。因此,典型的操作可能如下所示:

const
  fs = require('fs'), 
  { promisify } = require('util'),
  readdir = promisify(fs.readdir);

const listFiles = dir => dispatch => 
  readdir(dir)
    .then(files => dispatch({ 
      type: '…',
      payload: { files }
    }));

所以:

try {
  store.dispatch(listFiles('/some/path'));

catch (error) {
  //some rescue plan here,
  //won't work if directory not exists

}

不会在这里工作,因为动作是异步的,现在,我看到处理所有错误的唯一方法是在所有操作中为所有promises添加.catch()并在那里发送错误操作。

这有两个缺点:

  1. 很多代码重复和
  2. 我需要知道未来可能出现的所有错误。
  3. 所以我的问题是:有没有办法创建一个全局错误处理程序,如果异步操作失败也会调用它,这样我就可以向状态添加一些指示信息的错误,可以显示?

    使用»storeEnhancer«或某些»中间件«可以实现吗?

    更新

    我能找到一些非常有用的东西:

    process.on('unhandledRejection', (reason, promise) => {
      console.log(reason.message);
    });
    

    只要Promise被拒绝且没有添加catch块,就会触发该回调。现在接缝要做,但无论如何,我更喜欢一个基本上做同样事情的解决方案,但只针对在store.dispatch()内被触发的被拒绝的Promise,所以只有在处理动作时出错/ redux中的/ middleware / redurs会发生。

1 个答案:

答案 0 :(得分:0)

如果您正在寻找redux中间件解决方案,请查看redux-catch