I think the FBRequest is asynchronous, so I tried placing it in the first function to run on the same thread, to no avail.
I think you are completely missing the meaning of "asynchronous". You don't have to have threads for things to be asynchronous -- you can execute something asynchronously on the same thread. (Though in this case it probably does its main stuff on another thread, and then runs the completion block on the original thread.)
When you call an asynchronous API, the completion block will not execute before the rest of your function. Pretty much guaranteed.