Return 猫鼬模型保存后的承诺
Return promise after mongoose model saving
我正在尝试 return 在 mongoose 中保存模型后的承诺。
这是用户文档的架构:
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 总是 return undefined 而不是承诺。
我想要的是解决创建的 User Object 并在发生错误时拒绝错误的承诺。
有什么想法吗?
提前致谢。
您的代码中发生的事情是,当您 return Promise 时,它实际上是传递给 new_user.save()
.
的回调函数的 return 值
如果您希望 addUser
函数 return 一个解析为用户对象的 Promise,您可以将 new_user.save()
包装在一个 Promise 中,而 return .
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);
}
});
});
}
将整个 addUser 函数包装在 return new Promise()
中,然后在保存回调中 resolve/reject
我正在尝试 return 在 mongoose 中保存模型后的承诺。
这是用户文档的架构:
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 总是 return undefined 而不是承诺。 我想要的是解决创建的 User Object 并在发生错误时拒绝错误的承诺。
有什么想法吗?
提前致谢。
您的代码中发生的事情是,当您 return Promise 时,它实际上是传递给 new_user.save()
.
如果您希望 addUser
函数 return 一个解析为用户对象的 Promise,您可以将 new_user.save()
包装在一个 Promise 中,而 return .
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);
}
});
});
}
将整个 addUser 函数包装在 return new Promise()
中,然后在保存回调中 resolve/reject