The promise pattern is not meant to speed up callback-based code, or to eliminate callbacks altogether.
The purpose of a promise is to allow an asynchronous operation to be cancelled. In the old way, there'd be no standard way to cancel something like this,
xhr.get(url, function (data) {
// do something with the data
});
If we have a promise, we can cancel it, getPromise = xhr.get(...);
// later...
getPromise.cancel();
By creating a standard promise pattern, you can have any number of heterogeneous asynchronous operations chained or canceled together uniformly.