承诺不使用链式promises node.js执行

时间:2015-06-02 15:47:32

标签: angularjs node.js

我使用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,如果')被执行,但承诺不是。

1 个答案:

答案 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回调。

相关问题