The console output happens before the callback runs, so evalout equals "lcl". I've also tried the function as a named function, but the same thing happens. I think there is something basic that I'm missing.

Long Answer: I asked my brother (a web dev), and he said the call must be asynchronous like a call to a server from a browser. He suggested that I do whatever I want to do with the returned value inside the callback. He also suggested that the asynchronous call should probably be the last line in a function. If I want to continue execution AFTER the async call returns, then I can just call another function at the end of the callback function.