在mongoose中级联创build/删除集合的好方法
第一个或第二个收集是删除收集的正确方法?
我觉得这是第二个,但第一个更容易使用。 是否可以使用承诺来缓解代码的读取?
第一种方法:
beforeEach((done) => { //Before each test we empty the database //Remove Roles Role.remove({}, (err) => {}); //Remove Users User.remove({}, (err) => {}); // Remove Workouts Workout.remove({}, (err) => {}); // Create user Role.create({"name" : "Administrator"},(err, adminRole) => { User.create({ firstname : "***", businessId: "1", lastname : "***", email : "***", roles:[adminRole]}, (err) => { done(); }); }); });`
第二种方式:
beforeEach((done) => { //Before each test we empty the database //Remove Roles Role.remove({}, (err) => { //Remove Users User.remove({}, (err) => { // Remove Workouts Workout.remove({}, (err) => { // Create user Role.create({"name" : "Administrator"},(err, adminRole) => { User.create({ firstname : "***", businessId: "1", lastname : "***", email : "***", roles:[adminRole]}, (err) => { done(); }); }); }); }); }); });
第二个select是最安全的,因为如果在操作中发生错误,则不执行下一个。
当然你应该使用承诺。 代码变得更清洁:
Role.remove({}) .then(() => User.remove({}) .then(() => Workout.remove({}) .then(() => Role.create({"name" : "Administrator"}) .then((adminRole) => User.create({ firstname : "***", businessId: "1", lastname : "***", email : "***", roles:[adminRole]}) .then(() => done()) .catch((error) => ...);
为了能够使用承诺,你可以将mongoose的promise
设置为本地promise
(只要你的节点版本> = 6):
mongoose.Promise = global.Promise;