My understanding of sagas is that they’re for compounding multiple related operations into a single (non-atomic) transaction. The classic example is travel booking, where in one go you need to reserve a flight, car, and hotel. They all have to happen or none of them do. Each step is done separately and each has a well-defined “undo” operation. So if the flight and car bookings succeed but the hotel booking bombs out, you undo the other two bookings and return a failure.
redux-saga is actually a lot more generic than the historical definition of the saga pattern, but it provides the foundation for the general idea: side effects are confined to a single execution “thread” (abstractly, not a real thread), and failures are handled gracefully.
It’s a higher-level thing than thunks, with nicer syntax, but they can both express the same concepts. The two work together just fine, though I’m not sure if it’s common idiom to use both (I’m a Vue guy and I just sling around refs instead of using state managers)