(#1591) - handle undefined promise.cancel

The original promise (from Promise in utils.toPromise) may not have a cancel method, which is OK.