javascript - 通过 Mongoose 回调传递值

标签 javascript node.js mongodb mongoose callback

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

另一个函数利用该函数,我将让它执行一些额外的任务。

这里的问题是,我在控制台中获取结果,但不确定如何通过回调传递它。

<小时/>

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

});

我正在寻找正确的方法。

最佳答案

这是因为我们无法为异步函数 getCount 执行这种返回。我的建议是切换到 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;
}

关于javascript - 通过 Mongoose 回调传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51644420/

相关文章:

javascript - MongoDB嵌入文档: size limit and aggregation performance concerns

mongodb:如何备份mongodb

javascript - "Anonymous"合并 React 提供程序时添加的 HTML 元素

ajax - 为什么这个简单的 jQuery ajax 不起作用?

node.js - 使用skipper-s3时如何添加ACL和Content-Type参数?

node.js - Meteor 最后在 mongodb 中执行的查询?

python - 在 pymongo 中将 writeConcern 级别设置为未确认

mongodb - 我正在尝试连接到mongodb Atlas,但我不断收到错误消息,无法继续

javascript - 从重定向获取链接

javascript - jquery 和表单的混合