如何从Node js回调返回

时间:2018-02-03 17:39:06

标签: node.js

我写了一个小代码片段,它打印输出但是它没有从回调中返回任何值()

你能帮助我在哪里弄错了 `

function helloworld(string,callback){
  //callback(string){
        if ( string == "Tim"){
          callback('null',string+" "+"Little");
        } else if ( string == "Jason"){
          callback('null',string+"Right") ;
        } else {
          callback ('error : No rule is defined for '+string,string);
        }
    //  };
}


function invoke_callback(input){
      helloworld(input,
          function(err,name){
              if (err != 'null'){
                console.log(err);
                return(err);
              }
              console.log(name);
              return(name);
          }
      )
}

console.log(invoke_callback("Tim"));

`

它的输出是 - 蒂姆小 未定义

我期待 - 蒂姆小 蒂姆·利特尔

3 个答案:

答案 0 :(得分:0)

你错过了什么。最后一个console.log正在打印invoke_callback返回的内容,这没什么。这就是未定义的原因。 为了获得你想要的东西,你必须返回helloworld方法的结果。但是这种方法也没有返回任何东西。所以你需要返回回调结果。然后你会得到它。这就是它的样子:

function helloworld(string,callback){
  //callback(string){
        if ( string == "Tim"){
          return callback('null',string+" "+"Little");
        } else if ( string == "Jason"){
          return callback('null',string+"Right") ;
        } else {
          return callback ('error : No rule is defined for '+string,string);
        }
    //  };
}


function invoke_callback(input){
      return helloworld(input,
          function(err,name){
              if (err != 'null'){
                console.log(err);
                return(err);
              }
              console.log(name);
              return(name);
          }
      )
}

console.log(invoke_callback("Tim"));

答案 1 :(得分:0)

void stackTrace(int prms, int localVars){ } void nextTrace(unsigned int *framePointer, int prms, int localVars){ } 不返回任何内容,因此输出为corect!

如果您认为invoke_callbackreturn(name);电话的返回值,那么您就错了。

invoke_callback正在将名称返回到return(name);函数

中的回调

如果你这样做:

helloworld

然后你得到你想要的东西

而且:

...
if ( string == "Tim"){
    // here is where your `return name;` ends up
    var name = callback('null',string+" "+"Little"); 
    console.log(name);
} else if ( string == "Jason"){
...

不正确,应该是

return(name); 

答案 2 :(得分:0)

你在做错的是你实际上是在 helloworld 函数内部返回实际应该返回到这个函数之外和 invoke_callback 函数内部像这样的变量..

var SomeName;

function invoke_callback(input){
      helloworld(input,
          function(err,name){
              if (err != 'null'){
                console.log(err);
                return(err);
              }
              console.log(name);
              SomeName = name;
              
          }
      )
      return(SomeName);
}

console.log(invoke_callback("Tim"));