Promises Exercise

As a reference, here is the earlier work we had done for getUser:

Callback pattern
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!");
Promise pattern
function getUser(id) { console.log("Reading a user from a database..."); return new Promise((resolve, reject) => { setTimeout(() => { console.log("Received user data..."); resolve({ ID: id, "Account number": "58721094531267" }); }, 2000); }); } console.log("listening for events"); getUser(1) .then((user) => console.log(user)); console.log("still listening for events!");

I've ignored the case where the Promise may be "rejected" to keep the example concise.

Exercise Update the following code to use Promises instead of callbacks.


Solution
function getUser(id) { console.log("Reading a user from a database..."); return new Promise((resolve, reject) => { setTimeout(() => { console.log("Received user data..."); resolve({ ID: id, "Account number": "58721094531267" }); }, 2000); }); } function getLoans(account) { console.log("Request for loan data..."); return new Promise((resolve, reject) => { setTimeout(() => { console.log("Received loan data..."); resolve({ "Most recent": "loan 3", All: ["loan 1", "loan 2", "loan 3"] }); }, 2000); }); } function getTransactions(loan) { console.log("Request for transactions data..."); return new Promise((resolve, reject) => { setTimeout(() => { console.log("Received transactions data..."); resolve(["tran 3", "tran 2", "tran 1"]); }, 2000); }); } console.log("listening for events"); getUser(1) .then(user => getLoans(user["Account number"])) .then(loans => getTransactions(loans["Most recent"])) .then(transactions => console.log(transactions)); console.log("still listening for events!");