Promises are containers holding async values inside. Let's compare them with arrays. An array holds multiple values (or a single non-deterministic value one could say...) while a promise holds a single value or an error. You can extract a value from an array but not from a promise. Those differences aren't that important in many contexts so accepting an idea that promises are containers is crucial.
What are the results of the following cases?
console.log(Promise.reject(1).catch(e => e))
Promise.reject(1).catch(e => e).then(console.log)