redux-saga-thunk
Version:
Dispatching an action handled by redux-saga returns promise
44 lines (35 loc) • 1.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _utils = require('./utils');
var middleware = function middleware() {
var responses = {};
return function (next) {
return function (action) {
var error = action.error,
payload = action.payload;
if ((0, _utils.isThunkAction)(action) && !(0, _utils.isCleanAction)(action)) {
if (!(0, _utils.hasKey)(action)) {
var thunk = (0, _utils.generateThunk)(action);
return new Promise(function (resolve, reject) {
responses[thunk.key] = function (err, response) {
return err ? reject(response) : resolve(response);
};
next((0, _utils.createThunkAction)(action, thunk));
});
}
var _getThunkMeta = (0, _utils.getThunkMeta)(action),
key = _getThunkMeta.key;
if (!responses[key]) {
throw new Error('[redux-saga-thunk] ' + (0, _utils.getThunkName)(action) + ' should be dispatched before ' + action.type);
}
responses[key](error, payload);
delete responses[key];
return next((0, _utils.createThunkAction)(action, (0, _utils.generateThunk)(action)));
}
return next(action);
};
};
};
exports.default = middleware;