如何将MongoDB查询结果导出到数组?自定义函数无法返回数据求助
问题分析与解决
你的代码问题出在异步执行顺序和**错误使用await**上:
List.find()是异步操作,它的回调会在数据库查询完成后才执行,但你在回调外部直接执行console.log(listeler)和return listeler,此时回调还未执行,数组自然是空的。await加在foundLists.forEach()上完全无效——forEach只是同步遍历数组,不会返回Promise,await对它起不到任何等待作用。
正确写法(推荐用async/await)
直接利用Mongoose的Promise支持,把函数改成异步函数:
async function findListNames() { try { // 等待数据库查询完成,拿到结果 const foundLists = await List.find({}); // 若仅需转存查询结果,直接返回foundLists即可 // 若要提取特定字段(比如名称),用map: // const listeler = foundLists.map(item => item.name); const listeler = foundLists; console.log(listeler); return listeler; } catch (err) { console.error('数据库查询失败:', err); return []; } }
调用注意事项
async函数返回的是Promise,使用时需加await或用.then()链式调用:
// 方式1:在另一个async函数里用await async function getLists() { const lists = await findListNames(); // 在这里处理lists数组 } // 方式2:用.then()链式调用 findListNames().then(lists => { // 处理lists数组 }).catch(err => { // 处理错误 });
备选方案(回调风格)
如果习惯用回调,可以把结果通过回调传递出来:
function findListNames(callback) { List.find({}, function(err, foundLists) { if (err) { console.error('查询出错:', err); return callback(err, []); } const listeler = foundLists; console.log(listeler); callback(null, listeler); }); } // 调用示例 findListNames((err, result) => { if (err) { // 处理错误 } else { // 使用result数组 } });
内容的提问来源于stack exchange,提问作者Ugur
相关产品推荐
相关产品推荐

