Когда пользователь посещает определенную страницу моего Приложения, Компонент отправляет действие для получения информации. А именно, действие выполняет следующие операции:
Base.find({req.params.id})
BaseUser.find({ baseId: req.params.id }) **returns multiple docs**
Message.find({ baseId: req.params.id }) **returns multiple docs**
Операция происходит в этом порядке. Я мог запросить первый через .findById, но для единообразия задачи я выбрал .find()
. Проблема сейчас в том, что результаты
Promise.all([
Base.find({ _id: req.params.id }),
BaseUser.find({ baseId: req.params.id }),
Message.find({ baseId: req.params.id })
])
входит в массив, например:
[
[ { created: 2018-08-29T23:59:35.380Z,
_id: 5b8741151985662f10d04fdb,
creatorId: 5b86f7970cd98b2004969bf0,
title: 'testBase1',
} ],
[ { created: 2018-08-30T00:57:57.764Z,
acceptedMembership: true,
isCreator: true,
_id: 5b8741151985662f10d04fdc,
userId: 'tester1',
baseId: 5b8741151985662f10d04fdb }
],
[ { created: 2018-08-30T00:58:09.182Z,
_id: 5b8741211985662f10d04fdd,
baseId: 5b8741151985662f10d04fdb,
content: 'testMessage1' }
]
]
Это, очевидно, вызывает проблемы при дальнейшей попытке отобразить / отфильтровать / res.json () данных. Есть ли какой-нибудь известный способ вернуть это в одном массиве или, что еще лучше, передать его во внешний интерфейс (действие приставки) как объект? Кто-нибудь знает лучшее решение, которое немного по-другому решает эту проблему и мешает мне выбрать каждый из этих методов на подкомпонентах?
Обновление:
Я сейчас построил это, на что довольно уродливо смотреть:
let completeObject = {
base: {},
users: [],
messages: []
};
Base.findById(req.params.id)
.then(data => {
completeObject.base = data;
return data;
})
.then(data => {
BaseUser.find({ baseId: req.params.id })
.then(data => {
completeObject.users = data;
return data;
})
.then(data => {
Message.find({ baseId: req.params.id }).then(data => {
completeObject.messages = data;
return res.json(completeObject);
});
});
})