reject promise rather than throwing an exception