Nodejs回调:如何定义回调?

时间:2018-06-18 02:39:56

标签: node.js callback

我正在审查一个示例nodejs服务器代码,它运行正常。但无法理解以下代码:

   var handlers = {};

   // Creating a sample handler
     handlers.sample = function(data,callback){
     callback(406,{'name':'sample handler'});  // How is this line of code working??
    };

   // Creating a not found handler
     handlers.notFound = function(data,callback){
     callback(404); // How is this line of code working??
     };

在整个代码中没有实现"回调"功能然后如何

       callback(406,{'name':'sample handler'});

       callback(404);

正在运作?

请建议。感谢。

3 个答案:

答案 0 :(得分:0)

callback未在您发布的代码中实施;它是一个命名参数。

要调用其中一个需要callback的函数,您需要将其作为参数传递,例如:

handlers.sample("some data", () => console.log("I'm in a callback!));

第一个参数("some data")位于data参数中,第二个参数(() => console.log("I'm in a callback!))位于callback参数中。运行callback(404)时,它会执行callback函数(在上面的示例中,它会执行console.log("I'm in a callback!))。

答案 1 :(得分:0)

基本上,当你调用handlers.sample时,你应该传递一个函数作为你的第二个参数,并且该函数将被调用,通常是异步的,并且可能是在你传递的data之后完成的。第一个论点。例如,根据您提供的代码:

handlers.sample(dataObject, (number, object) => {
  console.log(number)
  console.log(object.name)
})

会在控制台中产生此结果:

406
sample handler

我很好奇,如果这是一个公共图书馆,你看到这段代码,我们可以仔细看看吗?

答案 2 :(得分:0)

我对此进行了进一步的挖掘,发现了

selectedHandler

在下面的代码中(问题中未提及)正在根据某种逻辑(此处未提及)被解析为handlers.samplehandlers.notFound变量名

  selectedHandler(data,function(status,payloadData){

    // somelogic with the status and payloadData

  });

此函数的第二个参数本身就是一个完整的函数

function(status,payloadData){

        // somelogic with the status and payloadData

      } 

用作handlers.samplehandlers.notFound中的第二个参数,即回调。因此,在当前上下文中执行Callback就是执行此函数(此函数是匿名的,因为它没有名称,并且将作为Callback执行)