在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;