返回Model.create(arr).exec()在mongoose中不起作用

时间:2016-05-18 20:35:36

标签: javascript node.js mongodb mongoose

我听说exec“返回一个promise”所以我正在使用exec它做异步调用。这个问题激发了我的另一个question。评论员说我的代码无效,因为:

  

您正在同步使用异步代码

我试图通过使用以下代码来解决这个问题。不知道这段代码是否会使它不同步,但我听说承诺有助于此。

所以我有这个,我不能创建(保存)数据,但我可以删除它。为什么我不能像create那样对remove使用相同的模式?

var Comp = require("./models/company.js");
  var arr = [
    {name : "comp1",industry : "industry1", ranking: 20},
    {name : "comp2",industry : "industry2", ranking: 5},
    {name : "comp3",industry : "industry3", ranking: 10}
  ]


Comp.find({}).exec()
    .then(function(docs){
        return Comp.remove({}).exec()
        .then(function(){
            console.log("deleted")
        })
    })
    .then(function(){
        return Comp.create(arr).exec()
        .then(function(data){
            console.log(data)
        })
    })

你能帮助我达到我原来的目标吗?

3 个答案:

答案 0 :(得分:2)

then功能不会返回承诺,执行

所以你需要做return Comp.remove({}).exec()

Comp.find({}).exec()
.then(function(docs){
    return Comp.remove({}).exec();
})
.then(function(result_of_remove){
    return Comp.create(arr).exec();
})
.then(function(result_of_create){
    ....
})

答案 1 :(得分:0)

首先,您应该确认raise FooException([1, 2])版本。

旧版本中的

mongoose返回一个查询对象;调用查询的Model.create(doc)方法将触发数据库操作并返回一个promise。

在新版本(我正在使用exec4.4.8 mongoose和'Model.remove(con)'中直接返回承诺。

请检查您的版本,看看是否需要删除一些Model.create(doc)

最后但并非最不重要的是添加exec调用以检查是否有错误,这在调试时有帮助

catch

答案 2 :(得分:0)

我通常在使用时想返回Promise时使用.exec()

Model.findOne(...)。exec()

Model.create(...)返回一个Promise。

  

Model.create(...)的.exec()函数不存在