我听说exec“返回一个承诺”,所以我使用exec来做异步调用。这个问题启发了我的另一个question。评论员说我的代码不工作是因为:
您正在同步使用异步代码
我试图通过使用下面的代码来解决这个问题。不知道这段代码会不会让它不同步,但我听说这会有帮助。
因此,我有这个,我不能创建(保存)数据,但我可以删除它。为什么我不能对remove
使用与create
相同的模式?
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)
})
})
你能帮我达到我在另一个问题中的最初目标吗?
发布于 2016-05-19 04:51:32
then
函数不返回promise,执行程序返回!
所以你需要做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){
....
})
发布于 2016-05-19 10:13:15
首先,你应该确认你的mongoose
版本。
在旧版本中:
Model.create(doc)
返回一个query对象;调用query的exec
方法将触发数据库操作并返回promise。
在mongoose
Model.create(doc)
的新版本(我使用的是4.4.8
)中,'Model.remove(con)‘直接返回一个promise。
因此,请检查您的版本,看看是否需要删除一些exec
最后但并非最不重要的是,添加catch
调用来检查是否有错误,这在调试时会有所帮助
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){
....
})
.catch(function(error){
console.log(error)
})
发布于 2019-04-01 08:58:17
我通常使用.exec(),当我想要在使用
Model.findOne(...).exec()
Model.create(...)返回一个Promise。
对于Model.create(...)
,不存在.exec()函数
https://stackoverflow.com/questions/37309637
复制相似问题