Node.js中如何从async/await返回数据?MongoDB场景技术求助
解决async/await嵌套回调导致返回值无法传递的问题
我明白你现在的困扰——想让异步函数返回MongoDB create操作的结果,但因为混用了async/await和回调函数,导致返回值根本传不到外层函数。咱们一步步来解决这个问题:
核心问题分析
你当前代码的主要问题是把async/await和传统回调函数混在一起使用:
- bcrypt的
genSalt、hash方法,以及Mongoose的create方法都支持Promise语法,完全不需要用回调 - 回调函数内部的
return只会终止当前回调函数,不会影响外层的async函数的返回值 - 嵌套的回调会让异步流程变得混乱,await无法正确捕获回调里的操作结果
修正后的代码
下面是调整后的代码,完全使用async/await来处理异步流程,同时正确返回你需要的结果:
async register_Employee_Credential(id, req, res) { try { let employee_credential = new Employee_credential({ employee: id, username: req.body.username, password: req.body.password }); // 用await调用bcrypt的Promise版本,不需要回调 const salt = await bcrypt.genSalt(10); const hash = await bcrypt.hash(employee_credential.password, salt); employee_credential.password = hash; // 直接await create操作,Mongoose的create返回Promise const result = await Employee_credential.create(employee_credential); // 如果成功,返回创建的结果 return result; } catch (err) { // 捕获所有异步操作的错误,处理后返回错误信息 console.log("employee credential error further: " + err); const errMessage = await help.Property_Validator(err); return errMessage; } }
关键调整点说明
- 移除所有回调函数:改用await直接调用返回Promise的方法,让异步流程线性化,更易读也更易维护
- 统一错误处理:所有异步操作的错误都会被外层的try/catch捕获,不需要在每个回调里单独处理错误
- 正确传递返回值:async函数里的return会直接把值包装成Promise返回给调用者,不管是成功的result还是错误的errMessage都能正确传递
这样调整后,你的函数就能按照预期返回MongoDB create操作的结果,或者在出错时返回处理后的错误信息了。
内容的提问来源于stack exchange,提问作者Tesfaye alemayehu
相关产品推荐
相关产品推荐

