Inside the utils file, we can get started next to the square method creating a new one called asyncSquare:
module.exports.square = (x) => x * x;
module.exports.asyncSquare
It'll take two arguments: the original argument which we called x, and the callback function that'll get called after our 1-second delay:
module.exports.square = (x) => x * x;
module.exports.asyncSquare = (x, callback) => {
};
Then we can finish up the arrow function (=>) and we can start working on the body of asyncSquare. It'll look pretty similar to the asyncAdd one. We'll call setTimeout passing in a callback and a delay. In this case, the delay will be the same; we'll go with 1 second:
module.exports.square = (x) => x * x;
module.exports.asyncSquare = (x, callback) => {
setTimeout(() => {
}, 1000);
};
Now we can actually call the callback. This will trigger the callback function that got passed in and we'll pass in the value x times x, which will properly square the number passed in place of x:
module.exports.square = (x) => x * x;
module.exports.asyncSquare = (x, callback) => {
setTimeout(() => {
callback(x * x);
}, 1000);
};