回调函数如何在NodeJS中工作?

时间:2019-06-01 16:01:45

标签: javascript node.js error-handling callback

考虑以下代码:

rectangle.js:

var rect = require('./rectangle');

function solveRect(l,b) {
    console.log("Solving for rectangle with l = "
                + l + " and b = " + b);
    rect(l,b, (err,rectangle) => {
        if (err) {
            console.log("ERROR: ", err.message);
        }
        else {
            console.log("The area of the rectangle of dimensions l = "
                + l + " and b = " + b + " is " + rectangle.area());
            console.log("The perimeter of the rectangle of dimensions l = "
                + l + " and b = " + b + " is " + rectangle.perimeter());
        }
    });
    console.log("This statement after the call to rect()");
};

solveRect(2,4);
solveRect(3,5);
solveRect(0,5);
solveRect(-3,5);

index.js:

rect(l,b, (err,rectangle)

在这一行rect中,我们调用l,b, err,rectangle函数并将l,b传递给它。我可以看到err, rectangle是什么,但是看不到callback是什么?

也无法理解{{1}}函数的定义在哪里?是内部功能吗?

2 个答案:

答案 0 :(得分:1)

这里的箭头符号可能会造成混淆,尤其是因为它占用了rect函数的大部分调用。等效于


var callback = function(err,rectangle){
  if(err) {
    // do stuff
  } else {
    // do stuff
  }
};

rect(l,b, callback);

当我们在index.js内部调用rect(l,b, callback)时,它会在rectangle.js内部调用该函数,并传入对index.js中的函数的引用(我在上面将其称为回调)。这意味着,当矩形调用callback(new Error( ...时,它将Error对象传递给index.js中定义的回调。然后,当它调用callback(null, ...时,它将为{r {1}}中的err参数传递null,并为callback中的矩形参数传递矩形对象。

目前,我们调用rect(l,b, callback)时没有err或矩形参数,javascript只知道它正在传递一个带有2个参数的函数。

答案 1 :(得分:0)

回调只不过是在像solveRect(2,4, fn)这样的函数调用中将函数作为参数传递的概念。这里fn将是一个函数。

您可以内联定义它:

solveRect(2,4, function(err,rectangle){
   // your code to handle response or delayed result
});

或作为命名函数:

let fn = function(err,rectangle){
   // your code to handle response or delayed result
}
solveRect(2,4,fn)