chain cancel so it can be called on any descendant promise.