首页 > 解决方案 > 如何实现对数据库的异步调用

问题描述

我需要帮助的朋友!我需要在我的 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);
};

我知道这是错误的代码,我想告诉你,我想做什么。此代码仅向我发送此 - []。

标签: node.jsexpressmongoosepromiseasync-await

解决方案


您的代码的问题是 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); };


推荐阅读