better control over the promise errors