Javascript回调函数错误

Javascript回调函数错误,javascript,express,callback,Javascript,Express,Callback,出于某种原因,我所写的belowan POST route代码并没有完全按照我所认为的方式工作 app.post("/", function (req, res, error) { var message = ""; tableSvc.createTable("tableName", function (error, result,response){ if (error) message += "There was an error in creating

出于某种原因,我所写的belowan POST route代码并没有完全按照我所认为的方式工作

app.post("/", function (req, res, error) {
  var message = "";
  tableSvc.createTable("tableName", function (error, result,response){
      if (error) 
        message += "There was an error in creating this table";
      else 
        message += "Table created succesfully";

  }); 
  console.log(message);     
});
没有打印,而是出现了一个错误。。。或创建表…,上面的代码只打印出一个空字符串。 我知道回调函数正在执行,因为如果我将console.logmessage放在回调函数中,那么上面两个字符串中的任何一个都会打印到控制台。
我不熟悉Javascript和调用函数,所以为什么我的代码没有按我预期的方式执行?

删除了我的猜测-没有理解您关于正在执行的回调的观点-这可能是另一个回复提供的异步问题。

我认为变量消息的范围是这里的问题。我没有试过这个,但可能有用

 app.post("/", function (req, res, error) {
    var obj = this;
    obj.message = '';
      tableSvc.createTable("tableName", function (error, result,response){
          if (error) 
            obj.message += "There was an error in creating this table";
          else 
            obj.message += "Table created succesfully";

      }); 

      while(obj.message.length===0){
            ;//Block the next execution till the operation above is complete.
      }


      console.log(obj.message);     
    });

createTable调用是异步的,因此当您对消息进行console.log时,回调尚未执行。我认为,由于tableSvc.createTable是异步的,这可能会在实际完成回调函数之前执行console.logobj.message。您应该移动回调函数本身中的逻辑。或者同步打电话。或者稍后使用setInterval,除非变量消息值被回调更改。是的,如果该方法是异步的,那么它还解释了我注意到的其他行为。接受回答:我了解2/3的解决方案,但如何在不更改实际方法本身的情况下同步调用?我不确定,您使用的是tableSvc.createTable的哪个库。我只是指出了一点提示,很少有异步函数像jQuery.ajax函数那样具有配置参数,我们可以配置async:false使调用同步。