我在节点上运行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()
并在那里发送错误操作。
这有两个缺点:
所以我的问题是:有没有办法创建一个全局错误处理程序,如果异步操作失败也会调用它,这样我就可以向状态添加一些指示信息的错误,可以显示?
使用»storeEnhancer«或某些»中间件«可以实现吗?
更新
我能找到一些非常有用的东西:
process.on('unhandledRejection', (reason, promise) => {
console.log(reason.message);
});
只要Promise被拒绝且没有添加catch块,就会触发该回调。现在接缝要做,但无论如何,我更喜欢一个基本上做同样事情的解决方案,但只针对在store.dispatch()
内被触发的被拒绝的Promise,所以只有在处理动作时出错/ redux中的/ middleware / redurs会发生。