JavaScript not getting function returns in Node.js -
i have made irc bot purely learning purposes have minecraft server use api status json. have made code , works reason when try , use return on function can content seems not work?
so have 2 functions below:
function getservers(name) { if (name == "proxy") { var request = unirest.get(proxy); request.header('accept', 'application/json').end(function (response) { main = response["raw_body"]; data = json.parse(main); console.log(data["motd"]); return data.motd; }); } else if (name == "creative") { var request = unirest.get(creative); request.header('accept', 'application/json').end(function (response) { main = response["raw_body"]; data = json.parse(main); return data; }); } else if (name == "survival") { var request = unirest.get(survival); request.header('accept', 'application/json').end(function (response) { main = response["raw_body"]; data = json.parse(main); return data; }); } } // main logic: function parsemessage(msg, to) { // execute files function pu(o,t,f){if(o)throw o;if(f)throw f;bot.say(to,t)} if (msg.substring(0,1) == pre) { // array msgs = msg.split(' '); console.log(msgs[0]); // run login if (msgs[0] == pre+"help") { bot.say(to, "help & commands can found here: https://server.dannysmc.com/bots.html"); } else if (msgs[0] == pre+"status") { // status of server, should return online/offline - player count each server - motd server = getservers("proxy"); console.log(server); /*var data = ''; var request = unirest.get('https://mcapi.us/server/status?ip=185.38.149.35&port=25578'); request.header('accept', 'application/json').end(function (response) { main = response["raw_body"]; data = json.parse(main); }); } else if (msgs[0] == pre+"players") { // should return player list each server } else if (msgs[0] == pre+"motd") { // should return message of day. } else if (msgs[0] == pre+"ip") { bot.say(to, "shinexusuk ip address: shinexusuk.nitrous.it"); } else if (msgs[0] == pre+"rules") { } } }
the code in getservers() function works, when
console.log(data["motd"]);
it outputs servers message of day. when return
data.motd
(same data["motd"]?) code calls function here
server = getservers("proxy"); console.log(server);
please note node.js code , contains many files can't paste it. here link github repo whole node application: here
when function getservers
called, makes asynchronous request , return nothing. callback fired response of request parameter.
note function getservers
end before end
callback of request called
(simplified version)
function getservers(name) { var request = unirest.get(proxy); request.header('accept', 'application/json').end(function (response) { main = response["raw_body"]; data = json.parse(main); console.log(data["motd"]); return data.motd; }); // nothing returned here }
what need function callback called after got response.
function getservers(name, callback) { // callback added var request = unirest.get(proxy); request.header('accept', 'application/json').end(function (response) { main = response["raw_body"]; data = json.parse(main); console.log(data["motd"]); callback(data.motd); // fire callback data parameter }); // nothing returned here }
and can use function :
getservers("proxy", function(server){ console.log(server); .... })
Comments
Post a Comment