首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回调问题-回调不是函数

回调问题-回调不是函数
EN

Stack Overflow用户
提问于 2020-04-19 05:12:29
回答 3查看 36关注 0票数 0

我得到了一个这样的错误: uncaughtException TypeError: cb不是一个函数,我认为这个错误是由回调错误引起的,但我不知道为什么会有这个错误。

代码语言:javascript
复制
app.put('/badge/student_badge/:id', upload, (req, res, next) => {
  const name = req.body.name;
  let data = {
    name: name
  }
  badger.updatePersonBadge({
    id: req.params.id
  }, data, (err) => {
    if (err) return next(err);
    res.status(201).json({
      message: 'Post updated successfully!'
    });
  });
});

function updatePersonBadge(options, cb) {
  schemas.badger.then(b => {
    b.findById({
      _id: options.id
    }, (err, resp) => {
      if (err) return cb(err);
      if (!resp) return cb("no badge found");
      name = options.name;
      title = resp.title;
      points = resp.points;

      updateBadge(name, title, points, cb);
      cb(null, resp);
    })
  })
}

function updateBadge(name, title, points, cb) {
  const dateCreated = new Date(),
    dateUpdated = dateCreated;
  registerSchemas.personModel.then(p => {
    p.findOneAndUpdate({
      name: name
    }, {
      $push: {
        badges: [{
          title: title,
          points: points,
          dateCreated: dateCreated,
          dateUpdated: dateUpdated
        }]
      }
    }, (err, resp) => {
      if (err) return cb(err);
      if (!resp) return cb("no person found");
    })
  })
}
EN

回答 3

Stack Overflow用户

发布于 2020-04-19 05:33:06

您没有传递cb参数,并且如果它是可选的(至少看起来应该是),则函数会缺少一条if语句:

代码语言:javascript
复制
updatePersonBadge(options, cb) {   // << cb (callback) argument expected

  // ...
  cb(null, resp);    // cb called therefore not optional (Its needed)

如果您像使用updatePersonBadge(aaa)而不是updatePersonBadge(aaa, myCallbackFn)那样使用它,那么cb()undefined,但表示为函数调用--这是不存在的。

您可以将其设置为可选(如果是这样的话):

代码语言:javascript
复制
  //...
  if(cb) cb(null, resp); // call the cb function if cb argument exists

或者如果你想说得更具体一些:

代码语言:javascript
复制
  //...
  if(cb && typeof cb === 'function') cb(null, resp);

传递的不是函数,而是data

代码语言:javascript
复制
badger.updatePersonBadge({}, data, errFn);
票数 0
EN

Stack Overflow用户

发布于 2020-04-19 05:36:44

我假设这就是您调用updatePersonBadge的地方。如果是,那么你将回调作为第三个参数传递,你必须正确使用它们。

代码语言:javascript
复制
badger.updatePersonBadge(
{
   id: req.params.id
}, 
data,
(err) => {
    if (err) return next(err);
    res.status(201).json({
       message: 'Post updated successfully!'
    });
});
票数 0
EN

Stack Overflow用户

发布于 2020-04-19 05:37:20

在这个例子中,问题是参数不匹配,而不是回调,而是发送数据

代码语言:javascript
复制
app.put('/badge/student_badge/:id', upload, (req, res, next) => {
const name = req.body.name;     
let data = {
    name: name
}
badger.updatePersonBadge({id:req.params.id}, data, (err)=>{.   -- three arguments passed
    if (err) return next(err);
    res.status(201).json({
        message: 'Post updated successfully!'
    });
});

});

在函数定义中,您只定义了2个参数。它应该是3个参数/该特定场景应该得到验证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61296312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档