252730
238 AdminUser.findByName(name)
239 .then(function(model){
240 if(!model || model.passwd != passwd){
241 res.send("fail");
242 throw new GError("用户名或密码不正确");
243 }
244 return model;
245 })
246 .then(function(model){
247 status = model.updatePass(newPasswd);
248 return status;
249 });
250 })
251 .then(function(status){
252 console.log("status:"+status);
253 res.send(status);
254 })
按照本应该的逻辑,247行更改密码后,将更改是否成功的状态用变量status传回来,给251行的then,然后这个then根据status来渲染网页。
但是由于247行的数据库操作是一个耗时的异步操作,所以251行的function会在247行的数据库操作结束之前执行。结果就是status还没有获得值就return给了渲染操作(252行会打印出status:undefined)。想了几个方法都没有成功,不知道大家有什么方法能解决这个问题。