title: This code doesn't seem to fire in order?
body: <p>My problem is that the code does not seem to be running in order, as seen below.</p>
  
  <p>This code is for my discord.js bot that I am creating.</p>
  
  <pre><code>
  
      var Discord = require("discord.js");
      var bot = new Discord.Client();
      var yt = require("C:/Users/username/Documents/Coding/Discord/youtubetest.js");
      var youtubetest = new yt();
      var fs = require('fs');
      var youtubedl = require('youtube-dl');
      var prefix = "!";
      var vidid;
      var commands = {
        play: {
         name: "!play ",
         fnc: "Gets a Youtube video matching given tags.",
         process: function(msg, query) {
           youtubetest.respond(query, msg);
           var vidid = youtubetest.vidid;
           console.log(typeof(vidid) + " + " + vidid);
           console.log("3");
         }
       }
      };
  
      bot.on('ready', () => {
        console.log('I am ready!');
      });
  
      bot.on("message", msg => {
        if(!msg.content.startsWith(prefix) || msg.author.bot || (msg.author.id === bot.user.id)) return;
  
        var cmdraw = msg.content.split(" ")[0].substring(1).toLowerCase();
        var query = msg.content.split("!")[1];
        var cmd = commands[cmdraw];
        if (cmd) {
          var res = cmd.process(msg, query, bot);
          if (res) {
            msg.channel.sendMessage(res);
          }
        } else {
          let msgs = [];
          msgs.push(msg.content + " is not a valid command.");
          msgs.push(" ");
          msgs.push("Available commands:");
          msgs.push(" ");
          msg.channel.sendMessage(msgs);
          msg.channel.sendMessage(commands.help.process(msg));
        }
      });
  
      bot.on('error', e => { console.error(e); });
      bot.login("mytoken");
  
  </code></pre>
  
  <p>The youtubetest.js file:</p>
  
  <pre><code>
  
      var youtube_node = require('youtube-node');
      var ConfigFile = require("C:/Users/username/Documents/Coding/Discord/json_config.json");
      var mybot = require("C:/Users/username/Documents/Coding/Discord/mybot.js");
  
      function myyt () {
          this.youtube = new youtube_node();
          this.youtube.setKey(ConfigFile.youtube_api_key);
          this.vidid = "";
      }
  
      myyt.prototype.respond = function(query, msg) {
        this.youtube.search(query, 1, function(error, result) {
          if (error) {
            msg.channel.sendMessage("There was an error finding requested video.");
          } else {
            vidid = 'http://www.youtube.com/watch?v=' + result.items[0].id.videoId;
            myyt.vidid = vidid;
            console.log("1");
          }
        });
        console.log("2");
      };
  
      module.exports = myyt;
  
  </code></pre>
  
  <p>As the code shows, i have an object for the commands that the bot will be able to process, and I have a function to run said commands when a message is received.
  Throughout the code you can see that I have put three console.logs with 1, 2 and 3 showing in which order I expect the parts of the code to run. When the code is run and a query is found the output is this:</p>
  
  <pre><code>
  
      I am ready!
      string + 
      2
      3
      1
  
  </code></pre>
  
  <p>This shows that the code is running in the wrong order that I expect it to.</p>
  
  <p>All help is very highly appreciated :)</p>
  
  <p><strong>*Update! Thank you all very much to understand why it isn't working. I found a solution where in the main file at <em></strong><code>vidid = youtubetest.respond(query, msg)</code><strong></em> when it does that the variable is not assigned until the function is done so it goes onto the rest of my code without the variable. To fix I simply put an <em></strong><code>if</code><strong></em> statement checking if the variable if undefined and waiting until it is defined.*</strong></p>