我对mongoose和javascript承诺很新。我将以全局承诺方式编写更新查询,我的代码如下 -
metadataAPI.route('/:surveyID')
.put(function(req, res) {
Surveys.findOne({_id : req.params.surveyID}, {"metadata" : 1})
.then(function(survey) {
return survey.metadata;
})
.catch(function(err) {
res.json({ Message : "Incorrect surveyID!"});
})
.then(function(metadata) {
Surveys.findOneAndUpdate(
{_id : req.params.surveyID},
{
$set : {
"metadata.language" : req.body.language || metadata.language,
"metadata.createdBy" : req.body.createdBy || metadata.createdBy,
"metadata.qCount" : req.body.qCount || metadata.qCount,
"metadata.category" : req.body.category || metadata.category,
"metadata.suggestionEnable" : req.body.suggestionEnable || metadata.suggestionEnable,
"metadata.publish" : req.body.publish || metadata.publish,
"metadata.pageArray" : req.body.pageArray || metadata.pageArray
}
}
)
.then(function() {
Surveys.findOne({_id : req.params.surveyID}, {"metadata" : 1})
.then(function(survey) {
res.json(survey);
})
.catch(function(err) {
res.send(err);
});
})
.catch(function(err) {
res.send(err);
});
})
.catch(function(err) {
res.send(err);
});
});
我的问题是虽然我在每个then()函数之后都有catch()处理程序。我仍然从节点获得UnhandledPromiseRejectionWarning。我该怎么解决呢谢谢!
答案 0 :(得分:0)
承诺的一个好处是,您可以完成一系列异步操作。在没有评估任何关于你的逻辑的情况下,我已经将操作弄平了,最后为链中发生的任何错误添加了一个catch。
Surveys.findOne({_id : req.params.surveyID}, {"metadata" : 1}).then(function(survey) {
var metadata = survey.metadata;
return Surveys.findOneAndUpdate({_id : req.params.surveyID},
{
$set : {
"metadata.language" : req.body.language || metadata.language,
"metadata.createdBy" : req.body.createdBy || metadata.createdBy,
"metadata.qCount" : req.body.qCount || metadata.qCount,
"metadata.category" : req.body.category || metadata.category,
"metadata.suggestionEnable" : req.body.suggestionEnable || metadata.suggestionEnable,
"metadata.publish" : req.body.publish || metadata.publish,
"metadata.pageArray" : req.body.pageArray || metadata.pageArray
}
}
)
}).then(function() {
return Surveys.findOne({_id : req.params.surveyID}, {"metadata" : 1});
}).then(function(survey) {
res.json(survey);
}).catch(function(err) {
res.send(err);
});
关于内容的快速说明,我不记得mongoose是否要求您将.exec()
链接到查询操作以获得承诺。