Home Understand JavaScript Synchronous vs Asynchronous

# Understand JavaScript Synchronous vs Asynchronous

Michael
1#
Michael Published in 2017-12-06 01:42:40Z
 This question already has an answer here: Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference 6 answers I am new to JavaScript, Node.js in particular, and I have 2 functions that I am trying to execute. One gets data from a file and passes it to a list, and the other reads from that list in order to get one of the lines from the text file. My code works flawlessly, except the second function executes before the first, which is obviously a problem considering the second function needs information from the first in order to execute successfully. let names = []; function loadNames() { var reader = new LineReader("names.txt"); reader.on("line", function (line) { names.push(line); console.log("length " + names.length) }); } function getName() { console.log(names.length); for (var i = 0; i < names.length; i++) { var name = names[i]; console.log("Loaded - " + name); } console.log("what is wrong with this thing?") }  loadNames() getName() Expected Output: length 1 length 2 length 3 length 4 length 5 length 6 length 7 length 8 length 9 length 10 10 Loaded - 1 Loaded - 2 Loaded - 3 Loaded - 4 Loaded - 5 Loaded - 6 Loaded - 7 Loaded - 8 Loaded - 9 Loaded - 10 what is wrong with this thing?  Actual Output (besides everything in parenthesis): 0 (from getName -> console.log(names.length)) what is wrong with this thing? (from getName) length 1 (from loadNames -> console.log("length" + names.length)) length 2 (from loadNames -> console.log("length" + names.length)) length 3 (from loadNames -> console.log("length" + names.length)) length 4 (from loadNames -> console.log("length" + names.length)) length 5 (from loadNames -> console.log("length" + names.length)) length 6 (from loadNames -> console.log("length" + names.length)) length 7 (from loadNames -> console.log("length" + names.length)) length 8 (from loadNames -> console.log("length" + names.length)) length 9 (from loadNames -> console.log("length" + names.length)) length 10 (from loadNames -> console.log("length" + names.length)) 
Michael R
2#
Michael R Reply to 2017-12-06 01:59:30Z
 There's plenty of great resources on the web to understand the asynchronous nature of JavaScript. For your specific problem, the library I think you're using offers a solution. reader.on('end', function () { getName() } 
 You need to login account before you can post.
Processed in 0.31544 second(s) , Gzip On .