Separated request logic into it's own class. Also utilizing the progress callback on the promise