如何在Mongoose模型中导出异步函数以兼容原有的findOne()回调调用方式?
如何在Mongoose模型中导出异步函数以兼容原有的findOne()回调调用方式?
嘿,这个问题我升级Mongoose的时候也碰到过,太懂你不想大面积改动调用代码的心情了!其实有个超低成本的解决方案,既能用上Mongoose新的异步写法,又能让原来所有回调式的调用完全保持不动,不用一行行修改。
你只需要修改users.js里的getOne函数,内部用async/await处理findOne的异步逻辑,然后把结果通过传入的回调函数返回就行,具体代码如下:
module.exports.getOne = async function(query, callback) { try { // 用await获取findOne的异步查询结果 const user = await User.findOne(query); // 成功时遵循Node.js回调标准:第一个参数传null,第二个传查询结果 callback(null, user); } catch (err) { // 出错时把错误对象传给回调的第一个参数 callback(err); } }
改完之后,你原来所有调用getOne的代码,比如:
User.getOne({ 'username' : username }, function(err, user) { // 你原来的业务逻辑代码完全不用动 });
都可以原封不动继续使用,完全不需要做任何修改!
这个方案的优势就是只改动了模型层的这一个函数,上层业务代码完全不受影响。如果之后你想逐步把代码迁移到async/await风格,也可以慢慢替换调用方的代码,现在先解决眼前的兼容问题就好。
备注:内容来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

