Just realised that the `reject` function should also return a "Promise<T2>"; it's supposed to recover from the rejection.