node.js - 如何实现对数据库的异步调用
问题描述
我需要帮助的朋友!我需要在我的 REST API 中编写获取请求的函数。在这个函数中,我需要通过 branchId 获取所有播放列表,并通过 playlistId 获取每个播放列表文件,并发送具有属性 [{playlist, files}, {playlist, files}, {playlist, files}] 的对象数组。
我认为我的功能需要是异步的。我尝试了一下,但是当我想为每个播放列表获取文件时遇到了一些问题。
exports.findBranchePlaylists = async function(req, res) {
let data = [];
let playlists = await Playlist.find({branch_id: req.params.branchId});
playlists.forEach(async (playlist) => {
let files = await File.find({playlistId: playlist._id });
data.push({playlist, files});
})
res.send(playlists);
};
我知道这是错误的代码,我想告诉你,我想做什么。此代码仅向我发送此 - []。
解决方案
您的代码的问题是 forEach 循环不支持等待语法(因为 forEach 不是异步的)。您可以将 forEach 更改为经典的 FOR 循环。我个人我会这样做(所以 1 个电话会给我所有 id 的数据):
exports.findBranchePlaylists = async function(req, res) {
let data = [];
let playlists = await Playlist.find({branch_id: req.params.branchId});
let files = await File.find({'playlistId': {$in: playlists.map( ele => ele._id) });
res.send(files);
};
推荐阅读
- blazor - 为什么我看不到对 DLL 的任何请求
- java - 读取模型上的轴突命令
- jenkins - 有没有办法在詹金斯开始执行管道之前验证管道文件
- reactjs - 我可以在反应中使用带有删除请求的 axios 发送表单数据吗?
- raspberry-pi - 树莓派 7 英寸触摸屏亮度控制 - 如何避免对 SD 卡的写入操作
- bash - 在 SQLPlus 中运行循环
- google-api - Google API 项目消失了
- python - 直接在 Python 中从网站 rar 文件夹中读取 csv 文件
- django - 从查询集中删除重复项的有效方法?
- python - 如何在一行中编写多个布尔表达式?