如何从回调中获取值?(NodeJs+Mongoose)
How get values out of a callback? (NodeJs + Mongoose)
我不太擅长回调,现在我遇到了使用mongoose查找文档的问题,但在发送响应之前在同一操作/控制器中使用该文档。
uploadFile = function(req,res) {
var _objs = {};
function retrieveUser(objs,username, callback) {
User.findOne({ 'username': username })
.exec(function(err, user){
if(err) callback(err,null,null);
else callback(null,user,objs);
});
}//retrieveUser()
retrieveUser(_objs,req.body.user,function(err,user,_objs) {
if(err) console.log('ERROR: ' + err);
_objs.user = user;
console.log(_objs.user);
});
console.log(_objs);
}
因此,在回调函数中,console.log()
正确地显示了对象,但第二个console.log()
显示_objs
为空。好吧,我需要用其他对象作为属性来填充_objs
,我该如何实现呢?
一切都按设计进行。您的代码将执行如下:
retrieveUser(_objs,req.body.user,function(err,user,_objs) {
// will be executed when the retrieveUser function completes is tasks...
if(err) console.log('ERROR: ' + err);
_objs.user = user;
console.log(_objs.user);
});
// ...meanwhile, execution will continue here.
console.log(_objs); // depending on how fast retrieveUser calls the callback, _objs will be set or (more likely) not set.
您可以在回调中继续应用程序的控制流,也可以使用Streamline.js、async.js、Step、Seq、IcedOffeeScript、promise.js、…等框架
我就是这么做的。实际上,我所期望的是,这与我在其他语言的其他框架中的控制器中所做的类似,查询一些实体,并创建另一个与之前查询的实体相关的实体。
uploadPic = function(req, res, next) {
var username = req.body.user,
estId = req.body.est;
async.series([
function(callback) {
User.findOne({ 'username': username})
.exec(function(err, user){
if(err) return callback(err);
if(!user) return callback(new Error("No user whit username " + username + " found."));
callback(null,user);
});
},
function(callback) {
Est.findById(estId)
.exec(function(err,est) {
if(err) return callback(err);
if(!est) return callback(new Error("No Est with ID " + estId + " found"));
callback(null,est);
})
},
],function(err,results){
if(err) return next(err);
console.log(results);
/// do my own stuffs here!
});// end async.series()
}
相关文章:
- 如何检查用户是否已经在NodeJs-Mongoose中关注其他用户
- 无法读取未定义的属性 - NodeJS,Express,Mongoose
- Schema.pre in Mongoose modules (NodeJS)
- NodeJS, Mongoose, return variable
- 使用 nodejs、restify 和 mongoose 确保数据完整性
- nodejs express mongoose connect to db error
- 使用$http.get(mongoose with nodejs)在嵌套的JSON中获取数组
- 如何从nodejs中的find返回,mongoose mongodb集合
- NodeJS+Mongoose连接超时
- Mongoose,nodejs,全文搜索
- NodeJs、AngularJs、Mongoose给出错误:TypeError:Object.keys在Function
- 在NodeJS中使用Mongoose+Mockgoose更新时忽略了唯一索引
- 使用nodejs、mongoose和JSON对象数组拼接
- 使用Mongoose查询是正确的,但是forEach之后数组总是空的.Nodejs / MongoDB
- NodeJs Mongoose循环收集数据
- Mongoose不会用NodeJs保存任何东西到db
- TypeError: .find(..)不是nodejs mongoose函数
- 无法在nodejs/mongoose/bluebird中获得返回的承诺
- 如何从回调中获取值?(NodeJs+Mongoose)
- nodejs / mongoose 更新文档中的“多级”值 / 无法设置属性