簡體   English   中英

貓鼬模型保存后返回承諾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM