The problem here is that the rpc calls are asynchronous, and deviceInfo will get a value AFTER the handler function will be finished. When you call Token_verify the second time, deviceInfo will have the value returned by the first call.
The solution is to pass args as the user data argument of RPC.call. The arguments of the handler should be resp, err_code, err_msg, ud, not resp, ud.
IMO, a better way to handle embedded rpc calls is in C/C++ where you have more control on handling errors and even returning data. Fortunately, in this case, Sys.GetInfo will never fail.
It will stop being blank once you get an IP. Your station is using WiFi and getting an address via DHCP, you will not have an IP address until you get it from the DHCP server
mos callwill try to connect to your device over the serial port somehow, and that most likely includes resetting it to establish the connection. Try using RPC instead: call via HTTP or WS or run your mJS code after the proper network event has fired