我使用带有mongodb的node.js和用于promises的q.js.
以下是我的mongodb架构:
{
UserId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
FirstName: String,
LastName: String,
Gender: String,
userDocument: [userDocumentSchema],
userEducation: [userEducationDetailsSchema]
};
var userEducationDetailsSchema = new Schema({
DegreeName: String,
University: String,
});
var userDocumentSchema = new mongoose.Schema({
DocumentName: String,
DocumentPath: String
});
I have following function by chaining promises:
var updateUserDetails = function (req, res) {
var finalResult = [];
/* This is the function to update user using promise.*/
updateUserBasicDetails(req).then(function (req) {
_.each(req.body.userEducation, function (sd) {
return getEducationDetail(req.body._id, sd) /* this fun finds if education details are present or not by iterating usertEducation Array */
.then(function (result) {
if (result) {
/* if education details exist then this will update the details */
return updateEducationDetails(sd, req.body._id).then(
function (result) {
return result;
})
} else {
/*else add the education details*/
return addEducationDetails(sd, req.body._id).then(
function (result) {
return result;
})
}
}).then(function (result) {
finalResult.push(result);
})
})
return JSON.stringify(finalResult);
}).then(function (finalResult) {
res.json({
"token": finalResult /*but here m getting empty result */
})
}).catch(console.log).done();
}
我的查询是:
答案 0 :(得分:0)
你的代码可以更干净,请调整一些这样的部分
var updateUserDetails = function (req, res) {
var finalResult = [];
/* This is the function to update user using promise.*/
return updateUserBasicDetails(req)
.then(function (req) {
_.each(req.body.userEducation, function (sd) {
return getEducationDetail(req.body._id, sd)
.then(function (result) {
if (result) {
return updateEducationDetails(sd, req.body._id)
}
else {
return addEducationDetails(sd, req.body._id)
}
})
.then(function (result) {
return result;
})
.then(function (result) {
finalResult.push(result);
})
})
return JSON.stringify(finalResult);
})
.then(function (finalResult) {
res.json({
"token": finalResult /*but here m getting empty result */
})
})
.catch(function (e) { console.log(e); })
.done();
}
如果您替换_.each
并使用q.all
,则上述代码也可以更清晰。
function(x, y) {}