This method is documented as propagating cancellation upwards. The current implementation means if the receiver is asked to cancel, it immediately asks the upstream promise to cancel too. What it should do is propagate cancellation like the built-in promise children do. In effect, it should convert the receiver into a child of the given promise.