You can also race it with another promise, which e.g. resolves on timeout.

You can but it still won't get cancelled. I found out when I tried to implement a hard time limit to a call.