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?

  1. console.log(Promise.resolve(1))
  1. Promise.resolve(1).then(console.log)
  1. console.log(Promise.reject(1))
  1. Promise.reject(1).then(console.log)
  1. console.log(Promise.reject(1).catch(e => e))
  1. Promise.reject(1).catch(e => e).then(console.log)