Basically saying both are same. But there are some differences.
Lets see what are some of the advantages of Promises.
- Promises are just a cleaner way for running asynchronous callbacks.
- Promises also has error catching mechanism which are not in callbacks.
- Promises are an abstraction for cleaner and better functional code.
What are callbacks?
Callback is a function that is passed to another function as a parameter, and the callback function is called (or executed) inside the otherFunction
Example
$("#myBtn").click(function() { alert("Button Clicked"); });
They are basically closures.
What are Promises?
Promises takes one argument, a callback with two parameters, resolve and reject. If the call is a sucess call resolve else call reject.
Example
var promise = new Promise(function(resolve, reject) { // do a thing, possibly async, then… if (// worked) { resolve("Sucessfully completed"); } else { reject("something went wrong")); } });
You can also use chanining, like if in a synchronous code, you want to do one after another.
Example
getData('data.json').then(function(mydata) { return getData(mydata[0]); }).then(function(mydata0) { console.log("Got mydata!", mydata); })
Promises with Error functions.
getData('data.json').then(function(response) { console.log("Success!", response); }, function(error) { console.log("Failed!", error); })
Here there are two functions inside the then(), one for success and other for failure.
Promises with catch
getData('data.json').then(function(response) { console.log("Success!", response); }).catch(function(error) { console.log("Failed!", error); })
Not much about catch. Just a sugar for then() method.
All Promises at once
What if we have a chain of functions and we want to process it only when all completes.
Then the code will be like this.
Promise.all(arrayOfPromises).then(function(arrayOfResults) { //... })