猫鼬模型保存后返回承诺
Posted
技术标签:
【中文标题】猫鼬模型保存后返回承诺【英文标题】:Return promise after mongoose model saving 【发布时间】:2021-12-04 15:02:05 【问题描述】:我正在尝试在猫鼬中保存模型后返回一个承诺。
这是用户文档的架构:
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const UserSchema = new mongoose.Schema(
first_name:String,
last_name:String,
phone_number:String,
email:type:String, unique:true, required:true, lowercase:true,
account_status: Boolean,
hash:String,
salt:String,
);
module.exports = UserSchema;
这是用户模型的代码:
const mongoose = require("mongoose");
const userSchema = require("./UserSchema");
const userModel = new mongoose.model("User", userSchema);
module.exports = userModel;
这是保存用户对象的代码:
const UserModel = require("../models/user/UserModel");
function UserController()
UserController.prototype.addUser = function(user_datas)
var new_user = new UserModel();
new_user.first_name = user_datas.first_name;
new_user.last_name = user_datas.last_name;
new_user.phone_number = user_datas.phone_number;
new_user.email = user_datas.email;
new_user.account_status = false;
new_user.hash = user_datas.hash;
new_user.save(function(err, user)
if(err)
/**
Some customs code before returning the promise
**/
return new Promise(function(resolve, reject)
reject(err);
resolve(null);
);
if(user)
/**
Some customs code before returning the promise
**/
return new Promise(function(resolve, reject)
resolve(user);
reject(null);
);
);
addUser 函数总是返回 undefined 而不是一个 promise。 我想要的是解决 User Object 创建的承诺并在发生错误时拒绝错误。
有什么想法吗?
提前致谢。
【问题讨论】:
【参考方案1】:将整个 addUser 函数包装在 return new Promise()
中,然后在保存回调 resolve/reject
中
【讨论】:
【参考方案2】:在您的代码中发生的情况是,当您返回 Promise 时,这实际上是传递给 new_user.save()
的回调函数的返回值。
如果您希望 addUser
函数返回解析为 User 对象的 Promise,请将 new_user.save()
包装在 Promise 中并返回。
UserController.prototype.addUser = function(user_datas)
var new_user = new UserModel();
new_user.first_name = user_datas.first_name;
new_user.last_name = user_datas.last_name;
new_user.phone_number = user_datas.phone_number;
new_user.email = user_datas.email;
new_user.account_status = false;
new_user.hash = user_datas.hash;
return new Promise(function(resolve, reject)
new_user.save(function(err, user)
if (err)
reject(err);
else
resolve(user);
);
);
【讨论】:
以上是关于猫鼬模型保存后返回承诺的主要内容,如果未能解决你的问题,请参考以下文章