38 lines
1 KiB
JavaScript
38 lines
1 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
"use strict";
|
|
|
|
loader.lazyRequireGetter(
|
|
this,
|
|
["executeSoon", "isAsyncFunction", "reportException"],
|
|
"resource://devtools/shared/DevToolsUtils.js",
|
|
true
|
|
);
|
|
|
|
const ERROR_TYPE = (exports.ERROR_TYPE = "@@redux/middleware/task#error");
|
|
|
|
/**
|
|
* A middleware that allows async thunks (async functions) to be dispatched.
|
|
* The middleware is called "task" for historical reasons. TODO: rename?
|
|
*/
|
|
|
|
function task({ dispatch, getState }) {
|
|
return next => action => {
|
|
if (isAsyncFunction(action)) {
|
|
return action({ dispatch, getState }).catch(
|
|
handleError.bind(null, dispatch)
|
|
);
|
|
}
|
|
return next(action);
|
|
};
|
|
}
|
|
|
|
function handleError(dispatch, error) {
|
|
executeSoon(() => {
|
|
reportException(ERROR_TYPE, error);
|
|
dispatch({ type: ERROR_TYPE, error });
|
|
});
|
|
}
|
|
|
|
exports.task = task;
|