node.js - 如何实现对数据库的异步调用

标签 node.js express mongoose promise async-await

friend 们我需要帮助! 我需要在 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 = 异步函数(req, res) { 让数据= []; 让 playlists =等待 Playlist.find({branch_id: req.params.branchId}); let files = wait File.find({'playlistId': {$in: playlists.map( ele => ele._id) }); res.send(文件); };

关于node.js - 如何实现对数据库的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57133086/

相关文章:

node.js - 如何以阻塞方式访问redis而不是nodejs中的非阻塞(事件回调)

javascript - 从 Sequelize getter 方法访问关联表

node.js - npm install - javascript堆内存不足

javascript - 获取模型实例时键入错误

node.js - Mongo Aggregate - 获取多个值在查询结果中出现的次数

node.js - 不支持 MongoDB Azure OPERATOR_PULL

javascript - node scripts/install.js 没有指向正确的正确 url

node.js - 缺少 PFX 或证书 + 私钥

node.js - Sequelize - 根据标题中的术语过滤帖子?

javascript - 尝试获取 request.body Nodejs 中的所有字段时出现异常 "Object.keys called on non-object while trying to access object"?