https://medium.com/@shehanPW/multi-threading-and-asynchronous-programming-in-java-script-a06655c4e9d5