我使用node.js
解决了此代码的问题显然,以下承诺未被执行:
.post(function (req,res){
var bloguers = db.collection('bloguers');
var bloguer = req.body;
console.log(bloguer.id);
bloguers.findOne({id: bloguer.id}).then( function (respon){
if(respon != null){
console.log('dentro if');
return bloguers.replaceOne({id: bloguer.id}, bloguer,{upsert:true}, function (err){
console.log(err);
res.status(400).end();
});
}
else{
return bloguers.insertOne(bloguer).then(function (r){
}, function (err) {
console.log(err);
res.status(400).end();
});
}
}).then(function(r){
res.json(r);
})
});
这是功能的其余部分:
{{1}}
你可以看到console.log(' dentro,如果')被执行,但承诺不是。
答案 0 :(得分:0)
如果replaceOne
确实返回了一个承诺,那么你可能不应该将回调传递给它。
改变这个:
return bloguers.replaceOne({id: bloguer.id}, bloguer,{upsert:true}, function (err){
console.log(err);
res.status(400).end();
});
对此:
return bloguers.replaceOne({id: bloguer.id}, bloguer,{upsert:true})
.then(function () {
res.status(400).end();
})
.catch(function (err) {
console.log(err);
});
我不熟悉您正在使用的API(本机MongoDB驱动程序?)但如果API已经支持promises,那么如果它检测到您通过了它,它可能不会返回一个promise回调。