lil-saga is a small library to assist in use of the saga pattern.
lil-saga accepts a generator which may yield a Saga, a Promise, or an array containing a mix of Sagas and Promises.
If an array is yielded, the actions (and any subsequent rollbacks), will be performed concurrently.
If an error occurs during execution, any previously executed Sagas will have their undo performed, in reverse order of execution.
import lilSaga from 'lil-saga';
await lilSaga(function*() {
let promiseYieldingFunctionResult = yield promiseYieldingFunction();
let anotherPromiseYieldingFunctionResult = yield {
do() {
return anotherPromiseYieldingFunction();
},
undo() {
return anotherPromiseYieldingFunctionReverse();
}
};
let [
thing1,
thing2,
thing3
] = yield [
doThing1(),
{
do: () => doThing2(),
undo: () => undoThing2()
},
doThing3()
];
});