我听说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)
})
})
你能帮助我达到我原来的目标吗?
答案 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。
在新版本(我正在使用exec
)4.4.8
mongoose
和'Model.remove(con)'中直接返回承诺。
请检查您的版本,看看是否需要删除一些Model.create(doc)
最后但并非最不重要的是添加exec
调用以检查是否有错误,这在调试时有帮助
catch
答案 2 :(得分:0)
我通常在使用时想返回Promise时使用.exec()
Model.findOne(...)。exec()
Model.create(...)的.exec()函数不存在