Mongoose:用 promise 编写自己的方法
Posted
技术标签:
【中文标题】Mongoose:用 promise 编写自己的方法【英文标题】:Mongoose: write own methods with promise 【发布时间】:2018-02-11 02:16:02 【问题描述】:我想为一个模型写一些实例/静态方法,它使用 mongoose 的 API,并在使用 mongoose 的 API 之前和之后做一些事情。
比如我自己写了Article.createArticle
方法,它检查Article.create
之前的数据,创建后返回article.toObject()
。
这就是我希望我的createArticle
工作的方式:
Article.createArticle(someKeys: 'SomeData', ...)
.then(obj =>
// get plain object here
);
我试着写这样的东西:
Article.Schema.static(
createArticle: function(data)
return new Promise(function(resolve, reject)
checkDataKeys(data);
resolve(mongoose.model('Article').create(data)
.then(article => resolve(article.toObject()));
);
);
,
);
有了这个createArticle
,我只能在then
中得到undefined
,
我一定是搞错了。
另外,除了让createArticle
工作之外,还有什么方法可以让代码更优雅吗?
谢谢。
【问题讨论】:
【参考方案1】:我自己找到了适合我的方法。虽然我不是很了解这个机制,但也许我会在以后尝试研究它......
ArticleSchema.static(
createArticle: function(data)
checkDataKeys(data); // pre works
return mongoose.model('Article').create(data)
.then(obj =>
return obj.toObject(); // afterworks
// here, just get the plain obj from doc
// and *return* it
);
,
);
更新:在我搜索了一些关于 Promise 的内容后,也许这会更好。
ArticleSchema.static(
createArticle: function(data)
checkDataKeys(data); // pre works
return mongoose.model('Article').create(data)
.then(obj =>
return Promise.resolve(obj.toObject());
// Some say that this is totally same as directly return
)
.catch(err =>
return Promise.reject(err);
// if error, this will ensure the err will be caught
// for some async cases
);
,
);
【讨论】:
以上是关于Mongoose:用 promise 编写自己的方法的主要内容,如果未能解决你的问题,请参考以下文章