A simple redux middleware to chain async actions using promises
npm install --save redux-promise-queue-middleware
Import the middleware, initialize and add it to Redux store using applyMiddleware function:
import {createStore, applyMiddleware} from 'redux'
import promiseQueueMiddleware from 'redux-promise-queue-middleware'
let createStoreAndApplyMiddleware = applyMiddleware(
//others middleware...
promiseQueueMiddleware(),
//others middleware...
)(createStore);
The queue middleware will sequence all the actions that specify the "queue" parameter in the action object:
function actionToEnqueue(){
return {
type: 'ACTION-TYPE'
queue:{
id: 'QUEUE-NAME'
promise: new Promise((resolve)=>{
console.log('async action begin');
setTimeout(()=>{
console.log('async action resolved');
resolve()
},2000);
}
//other options
}
}
}
If you already use a middleware for managing promises you can add the promiseQueueMiddleware
before it to manage queues without affecting its behavior:
import {createStore, applyMiddleware} from 'redux'
import promiseQueueMiddleware from 'redux-promise-queue-middleware'
//import promiseMiddleware from 'promise-middleware-lib'
let createStoreAndApplyMiddleware = applyMiddleware(
//promiseMiddleware goes here
promiseQueueMiddleware(),
//others middleware...
)(createStore);
In this case you can avoid filling the promise
option and let your promise middleware to handle and return the promise to schedule.
Name | Type | Default | Description |
---|---|---|---|
id | string | undefined |
name of the queue. Note: in order to work a queue name must be specified |
promise | func | undefined |
promise used to wait for async operation (optional) |
onActionDequeue | func | undefined |
operations to perform after action dequeue and before it's execution |
clearQueueOnReject | bool | false |
if an action of the queue is rejected the following actions in the queue won't be executed |