Promise: It is an interface for interacting with an object that represents the result of an action that is performed asynchronously, and may or may not be finished at any given point in time.
According to the AngularJS’s standard API Reference documentation, promise API is to asynchronous programming what try, catch and throw keywords are to synchronous programming. So, it is basically meant for better error handling.
Let’s make it Simple and Short, the Promise basically makes use of a $q which is a service in ng module. So there are totally two possibilities for the Promise, it can be resolved and rejected. The resolved/rejected promise will get back the data/error that needs to be used by a function in the controller. So basically the practical use of a promise is to make asynchronous possible.
Angular implements promise by using .then() function, which takes two functions as arguments, the former is for success and the later is for error (sometimes optionally it takes notify() as an arguments). This can be illustrated by simple real time example as below-
Let us take a scenario that there are two friends who wants to make strawberry milkshake and they have strawberries, cream and honey ready but when they look into their refrigerator they found that they are out of milk.
So, one of the friends promise the other that he would get the milk from the grocery store, while the other friend would not sit idle while he waits for his friend to get the milk, instead he asynchronously would slice the strawberries and make all the arrangements necessary for making the strawberry milkshake.
Now, there are two possibilities for the promise made by one of the friends – it can be resolved or rejected. If there is milk available at the grocery store and he can get it to his friend who is at home then the promise has been resolved and if for some reason he could not get the milk and returns empty hand then it means that the promise has been rejected. And this function uses getMilk() service provided by the other friend.
So here, if the promise has been resolved, the friends implement drinkMilkshake() else if the promise has been rejected they just eat fruit salad by implementing eatFruitSalad() method.
The promise in the getMilk() service looks like below –

References:
http://wiki.commonjs.org/wiki/Promises
https://docs.angularjs.org/api/ng/service/$q
