Callback
Callback is a function that is called when the result of an asynchronous function is ready.
function getUser(id, callback) { console.log("Reading a user from a database..."); setTimeout(() => { console.log("Received user data..."); callback({ "ID": id, "Account number": "58721094531267" }); }, 2000); } console.log("listening for events"); getUser(1, (user) => console.log(user)); console.log("still listening for events!");
Here is an exercise for you: Add an asynchronous function, getLoans
, that simulates sending a HTTP GET request to a bank, providing the account number, to receive a list of loans associated with the given account.
Use the callback pattern to display the loans.
function getUser(id, callback) { console.log("Reading a user from a database..."); setTimeout(() => { console.log("Received user data..."); callback({ "ID": id, "Account number": "58721094531267" }); }, 2000); } function getLoans(account) { // TODO update this to an asynchronous function return ["loan 1", "loan 2", "loan 3"]; } console.log("listening for events"); getUser(1, (user) => { console.log(user); // TODO call getLoans and display the returned values }); console.log("still listening for events!");
Solution
function getUser(id, callback) {
console.log("Reading a user from a database...");
setTimeout(() => {
console.log("Received user data...");
callback({ "ID": id, "Account number": "58721094531267" });
}, 2000);
}
function getLoans(account, callback) {
console.log("Sending HTTP GET request to a bank...");
setTimeout(() => {
console.log("Received loan data...");
callback(["loan 1", "loan 2", "loan 3"]);
}, 2000);
}
console.log("listening for events");
getUser(1, (user) => {
console.log(user);
getLoans(user["Account number"], (loans) => {
console.log(loans);
})
});
console.log("still listening for events!");