Node.js的回调函数的参数

时间:2019-11-28 17:24:25

标签: javascript node.js mongoose

下面的代码使用node.js和mongoose创建GET路由。在findById函数中,我们使用了带err和foundCampground的回调函数。我将回调函数解释为某种高阶函数,但是如何传递包含其参数的函数呢?执行findById时,传递给回调函数的变量是什么?我之所以这样问是因为err和foundCampground在其他任何地方都没有定义,所以我不知道在执行过程中应该传递给回调函数的内容。

app.get("/campgrounds/:id", function(req, res){
    Campground.findById(req.params.id, function(err, foundCampground){
        if(err){
            console.log(err);
        }
        res.render("show", {campground: foundCampground});
    });
 });

1 个答案:

答案 0 :(得分:0)

Campground.findById的第二个 参数 参数 ,它是errfoundCampground在任何地方都没有定义,因为它是...函数定义的 参数

如果您不熟悉参数参数之间的区别。

参数在函数的声明中是变量。 而 Arguments 是传递给该参数的函数的实际值。

例如:

req.headers.bodyfunction (err, foundCampground){ ... }参数

同时errfoundCampground是一个参数。

至于,什么arguments将传递到errfoundCampground中?这将由逻辑Campground.findById

处理

这是一个示例,说明如何编写自己的接受回调的函数


const items = [{ id: 1, name: 'Adam' }, { id: 2, name: 'Ramadoka' }, ];
function findById(searchedId, callback){
  // the 2nd argument is a callback function, that we will call 
  // by passing error (if not found) as the first argument (or null otherwise)
  // and the item (if the item is found) as the 2nd argument (or null otherwise)
  for (const item of items) {
     if(item.id === searchedId) {
         return callback(null, item);
     }
  }
  return callback(new Error('not found'), null);
}


// and then you can call it with something like:
findById(2, function (error, item) {
   if (error) { console.error(error); }
   if (item) { console.log(item); }
});

希望对您有帮助。