We’re gonna talk about why we can’t assume that a function is asynchronous even if it takes a callback.
What makes a function asynchronous?
Maybe you’re answer is “when argument of a function is a function”. Basically yes, but not exactly, every asynchronous function takes a function argument, but not every function that does so is asynchronous because argument function can be called synchronously.
Simply taking a callback doesn’t make a function asynchronous. There are many examples of functions that take a function argument but are not asynchronous. For example there’s
forEach in Array. It iterates over each item and calls the function once per item.
For this example, the code is executed step by step even though we have a callback, actually it won’t work as we want otherwise. Other examples of this would be the
sort method which takes also a callback but still synchronous. In the other hand
setTimeout takes a callback and it’s asynchronous. So functions with callbacks can be synchronous or asynchronous.
For a function to be asynchronous, it needs to perform an asynchronous task, it should incorporate the argument callback in handling the results of this asynchronous operation. For instance, let’s say we need to get data from a server asynchronously then run operations on that data. Something like the following:
That’s all, hopefully now you have a clear understanding of the difference. See you in the next articles 😃