我通过使用 Promise 将错误推送到数组中,但在将错误推送到数组之前,它会检查插入数据的条件,就像我正在插入数据一样。
var errorsArr= [];
var username = new Promise(function(resolve,reject){
User.findOne({ "username": req.body.username },function(err,user){
if(err)
reject(err);
if(user) {
resolve(1);
}else{
resolve(0);
}
});
});
username.then(function(data){
if( data == 1 )
errorsArr.push({"msg": "Username already been taken."});
}).catch(function(err){
console.log(err);
});
var email = new Promise(function(resolve,reject){
User.findOne({ "email": req.body.email },function(err,user){
if(err)
reject(err);
if(user) {
resolve(1);
}else{
resolve(0);
}
});
});
email.then(function(data){
if( data == 1 )
errorsArr.push({"msg": "email already been taken."});
}).catch(function(err){
console.log(err);
});
if(errorsArr.length >0)
{
req.session.error = errorsArr;
return res.redirect('/auth/Registration');
}
else {
var newUser = new User();
newUser.username = req.body.username;
newUser.password = req.body.password;
newUser.sex = req.body.sex;
newUser.email = req.body.email;
newUser.phoneNumber = req.body.phoneNumber;
newUser.age = req.body.age;
newUser.designation = req.body.designation;
newUser.timing = req.body.timing;
var CurrentDate = moment.tz(new Date(req.body.joiningDate), "Asia/Karachi").unix();
newUser.joiningDate = CurrentDate;
newUser.save(function (err, user) {
if (!err)
return res.redirect('/auth/Login');
});
}
你能帮我以更好的方式做到这一点吗,我是node.js的新手。提前致谢。
最佳答案
Promise.all 是您的解决方案。它等待所有的 promise 。
Promise.all([p1,p2,..]).then(function() {
// all loaded
}, function() {
// one or more failed
});
引用链接:
关于node.js - 我想在使用 node.js 完成所有 promise 后将数据插入 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35055240/