【问题标题】:Pass value via Mongoose Callback通过 Mongoose 回调传递值
【发布时间】:2019-01-09 16:22:30
【问题描述】:

我有 register.js 从那里导出我的函数来计算集合中的文档数。

另一个函数利用了这个函数,我会让它做一些额外的任务。

这里的问题是,我在console 中得到结果,但不知道如何通过回调传递它。


register.js

module.exports.getCount = function(){
  User.countDocuments({},function(err,count){
    console.log(count)    // WORKS FINE
    return count;         //Doesn't work
  })
}

module.exports.FB_updateUserID = function(facebookUserID, callback){
  this.getCount();

  return this.getCount(); //Doesn't work
}

facebookLogin.js

User.FB_updateUserID(req.body.facebookUserID, (err, updatedUser) => {
  if (err) throw err;
  console.log(updatedUser);    //THIS SHOWS UNDEFINED

});

我正在寻找正确的方法。

【问题讨论】:

  • 您没有返回结果。你必须返回一些东西。
  • 我也试过返回,让我告诉你。
  • @Akrion,请检查更新
  • 但是countDocuments不是异步调用吗?你应该做const number = await User.count(); 不?
  • 嗯,我猜是这样,但我在控制台中得到它时很奇怪,这让我觉得它工作正常。但是让我检查一下是不是因为它是异步的。

标签: javascript node.js mongodb mongoose callback


【解决方案1】:

这是因为我们不能为异步函数getCount 做那种return。我的建议是切换到promiseawait async 以获得更好的代码。

module.exports.getCount = function(){
  return new Promise((resolve, reject) => { // set callback as promise function
    User.countDocuments({}, function(err,count){
      if (err) { 
        reject(err);
      }

      console.log(count)    // WORKS FINE
      resolve(count); // resolve with count value
    })
  })  
}

module.exports.FB_updateUserID = function(facebookUserID){  
  return this.getCount();
}

// facebooklogin.js
User.FB_updateUserID(req.body.facebookUserID).then(updatedUser => {
  if (err) throw err;
  console.log(updatedUser); 
});

或使用await

// facebooklogin.js
try {
  const updatedUser = await User.FB_updateUserID(req.body.facebookUserID);
  console.log(updatedUser); 
} catch (err) {
  throw err;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多