24
loading...
This website collects cookies to deliver better user experience
async/await
. But, what's the difference, and when should you use one over the other?async/await
as the preferred option, and use Promises only on specific cases. But you should know how to use Promises anyway.async/await
is that it's generally easier to read, it almost feels like you're writing regular synchronous code.async/await
solves this problem because all the asynchronous tasks within the function all use the same scope.// Async/await version
(async function() {
const customer = await axios(`https://someapi.co/getCustomerByEmail?email=nico%40nicozerpa.com`);
const purchases = await axios(`https://someapi.co/getPurchasesByCustomerID/${customer.id}`);
console.log(`${customer.data.fullName} has purchased ${purchases.data.length} times`);
})();
// Promises version
axios(`https://someapi.co/getCustomerByEmail?email=nico%40nicozerpa.com`)
.then(function (customer) {
return Promise.all([
customer,
axios(`https://someapi.co/getPurchasesByCustomer/${customer.data.id}`)
]);
})
.then(function ([customer, purchases]) {
console.log(`${customer.data.fullName} has purchased ${purchases.data.length} times`);
});
customer
from the first function in the chain to the second..catch()
method at the end of the chain. You can handle it with async/await
, using the good ol' try/catch
. async/await
ends up encouraging developers to avoid catching errors, which is a bad practice..catch()
on the async
function if you're using async/await
. That works because asynchronous functions return promises. Let's see:async function printCustomerName() {
const customer = await axios(`https://someapi.co/getCustomerByEmail?email=nico%40nicozerpa.com`);
console.log(`The customer name is ${customer.data.fullName}`);
}
printCustomerName().catch(function(err) {
console.error("An error occurred.");
})
(async function() {
// Using promises and await at the same time, if you want to run two
// async tasks at the same time, you can do it only with Promise.all
const [customer, purchases] = await Promise.all([
axios(`https://someapi.co/getCustomerByID/48`),
axios(`https://someapi.co/getPurchasesByCustomerID/48`)
]);
console.log(`${customer.data.fullName} has purchased ${purchases.data.length} times`);
})();
(async function() {
// Using promises and await at the same time again:
// In this case, the function to convert to JSON is simple
// to just using Then.
const customer = await fetch(`https://someapi.co/getCustomerByID/48`)
.then(response => response.json());
console.log(`The customer name is ${customer.data.fullName}`);
})();
async/await
, but in some cases, it's OK to use promises.