使用Promise.all删除所有ID
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Promise.all删除所有ID相关的知识,希望对你有一定的参考价值。
首先,道歉,因为我无法为这个问题找到更好的标题。我将尝试解释我的问题,如果您不明白发生了什么,请告诉我。
[删除电影时,我还想从其流派数组中删除电影的ID。每个流派都有一个包含该流派中所有电影ID的电影数组,每个电影都有一个包含该电影的所有流派ID的流派数组。
async delete(req, res, next)
try
const movie = await Movie.findOne( _id: req.params.id );
if (!movie) return res.status(400).send( error: "Movie not found" );
// Here I find all the genres. I get an array with all the genres objects
// [genre1, genre2] inside the genre object there is an array with all the movie ids that belongs to that genre
let _genres = await Genre.find( _id: $in: movie.genre );
// Now I am trying to return all the genre that are different from the movie._id I am deleting
_genres = await Promise.all(_genres.map(async (genre) =>
genre.movies.filter(item => item !== movie._id);
await genre.save();
return genre;
));
await movie.remove();
return res.send( deleted: true );
catch (e)
next(e);
我没有收到任何错误,但是它没有从流派中删除电影ID。谢谢。
答案
感谢Bergi,我得以弄清楚。过滤器不会更改您的对象,因此我不得不重新分配它,还必须将id转换为字符串以确保可以进行比较。谢谢贝尔吉。
有效的代码,如果您认为我可以编写一种更好的方法,请告诉我。
async delete(req, res, next)
try
const movie = await Movie.findOne( _id: req.params.id );
if (!movie) return res.status(400).send( error: "Movie not found" );
movie.genre.forEach(async (id) =>
const genre = await Genre.findById(id);
if (genre)
genre.movies = genre.movies.filter(item => item.toString() !== movie._id.toString());
await genre.save();
);
await movie.remove();
return res.send( deleted: true );
catch (e)
next(e);
以上是关于使用Promise.all删除所有ID的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Nuxt 的 asyncData 中对 Promise.all 进行数组解构