use*_*314 44 mongoose mongodb node.js promise express
有人可以给我一个关于如何使用猫鼬的Promise的例子.这是我所拥有的,但它没有按预期工作:
app.use(function (req, res, next) {
res.local('myStuff', myLib.process(req.path, something));
console.log(res.local('myStuff'));
next();
});
Run Code Online (Sandbox Code Playgroud)
然后在myLib中,我会有这样的事情:
exports.process = function ( r, callback ) {
var promise = new mongoose.Promise;
if(callback) promise.addBack(callback);
Content.find( {route : r }, function (err, docs) {
promise.resolve.bind(promise)(err, docs);
});
return promise;
};
Run Code Online (Sandbox Code Playgroud)
在某些时候,我希望我的数据存在,但我如何访问它,或者获取它?
Ale*_*kin 46
在当前版本的Mongoose中,该exec()方法返回Promise,因此您可以执行以下操作:
exports.process = function(r) {
return Content.find({route: r}).exec();
}
Run Code Online (Sandbox Code Playgroud)
然后,当您想要获取数据时,您应该将其设为异步:
app.use(function(req, res, next) {
res.local('myStuff', myLib.process(req.path));
res.local('myStuff')
.then(function(doc) { // <- this is the Promise interface.
console.log(doc);
next();
}, function(err) {
// handle error here.
});
});
Run Code Online (Sandbox Code Playgroud)
有关承诺的更多信息,我最近阅读了一篇精彩的文章:http: //spion.github.io/posts/why-i-am-switching-to-promises.html
kon*_*mer 29
当你调用exec()查询时,Mongoose已经使用了promises .
var promise = Content.find( {route : r }).exec();
Run Code Online (Sandbox Code Playgroud)
Ale*_* B. 22
Mongoose 4.0带来了一些令人兴奋的新功能:浏览器中的模式验证,查询中间件,更新验证以及异步操作的承诺.
使用mongoose@4.1,您可以使用您想要的任何承诺
var mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
Run Code Online (Sandbox Code Playgroud)
另一个polyfilling global.Promise的例子
require('es6-promise').polyfill();
var mongoose = require('mongoose');
Run Code Online (Sandbox Code Playgroud)
所以,你可以稍后再做
Content
.find({route : r})
.then(function(docs) {}, function(err) {});
Run Code Online (Sandbox Code Playgroud)
要么
Content
.find({route : r})
.then(function(docs) {})
.catch(function(err) {});
Run Code Online (Sandbox Code Playgroud)
PS 猫鼬5.0
如果可用,Mongoose 5.0将默认使用本机承诺,否则不承诺.您仍然可以使用设置自定义promises库
mongoose.Promise = require('bluebird');,但是不支持mpromise.
我相信你在找
exports.process = function ( r, callback ) {
var promise = new mongoose.Promise;
if(callback) promise.addBack(callback);
Content.find( {route : r }, function (err, docs) {
if(err) {
promise.error(err);
return;
}
promise.complete(docs);
});
return promise;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69200 次 |
| 最近记录: |