Both `p.canonical()` and `this.canonical()` both traverse the chain of linked promises and yield the same result, but the former traverses a slightly shorter chain. So there's no observable difference between the two that I can test unfortunately, without exposing the traversal logic (which would be slow).