[英]Return promise after mongoose model saving
我試圖在貓鼬中保存模型后返回一個承諾。
這是用戶文檔的架構:
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 時,實際上是傳遞給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);
}
});
});
}
包裝整個 addUser 函數以return new Promise()
然后在保存回調中resolve/reject
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.