RxJS and the Difference Between mergeMap, switchMap, concatMap and exhaustMap

These three operators can often confuse new developers as the difference between them is minute, but very important!