https://medium.com/trabe/another-take-on-cancelable-promises-promise-cancelable-and-lazy-promises-e9f15d2ff2e5