Promise error handling

  1. catch catches both thrown error and promise reject call
  1. In a chain of then error in each step can be handled at the end