Поэтому я пытаюсь поэкспериментировать, как я получу все элементы в своих 5 объектах схемы. Вот как это выглядит.
const GetAllApple = (req,res) => {
const list = []
Ipad.find()
.then(data => list.push(data))
.catch(err => console.info(err))
Mac.find()
.then(data => list.push(data))
Accessories.find()
.then(data => list.push(data))
.catch(err => console.info(err))
HomeTools.find()
.then(data => list.push(data))
Phone.find()
.then(data => list.push(data))
.catch(err => console.info(err))
console.info(list)
res.send(list)
}
Но это не работает, он дает мне пустой массив, а также пустой вывод в моем postman
, но не дает никаких ошибок.
Но когда я пытаюсь сделать это, я закомментирую Ipad, Mac, HomeTools and Phone
Мой Accessories should something like this
и console.info(список)
Accessories.find()
.then(data =>
{
list.push(data);
res.send(data)
})
.catch(err => console.info(err))
console.info(list)
Вывод в терминале по-прежнему пустой список []
но в моем почтальоне
[
{
"_id": "624da84b97cdc2714b8fd5f5",
"itemname": "ACBASDASD",
"itemno": 122,
"image": "123123.jpg",
"createdAt": "2022-04-06T14:48:43.515Z",
"updatedAt": "2022-04-06T14:48:43.515Z",
"__v": 0
},
{
"_id": "624dac788a77d5ea59650f1e",
"itemname": "ACBASDASD",
"itemno": 122,
"image": "gray.jpg",
"createdAt": "2022-04-06T15:06:32.173Z",
"updatedAt": "2022-04-06T15:06:32.173Z",
"__v": 0
}
]
Это что-то вроде этого .. У кого-нибудь есть идея? Я хотел попробовать это, может быть, есть другое или что-то еще, о чем вы можете подумать ... Я знаю, что это немного странно, как и для меня, но я хочу попробовать эти новые разные идеи, лол, но это не очень хорошо работает.
ОТРЕДАКТИРОВАНО Я также пробовал что-то вроде этого
Ipad.find()
.then(data => res.send(data))
.catch(err => console.info(err))
Mac.find()
.then(data => res.send(data))
.catch(err => console.info(err))
Accessories.find()
.then(data => res.send(data))
.catch(err => console.info(err))
HomeTools.find()
.then(data => res.send(data))
.catch(err => console.info(err))
Phone.find()
.then(data => res.send(data))
.catch(err => console.info(err))
но это кажется незаконным, так как я вызываю обратный вызов res несколько раз.
Возможно, вам потребуется десериализовать объект ответа.
Ipad.find()
.then(res => {
const data = res.json();
list.push(data);
})
.catch(err => console.info(err))
Просто подумайте об этом, толкая объекты в массиве. Я думаю о его разборе, но я не знаю, как это сделать, лол.
Неважно, я уже нашел способ по этой ссылке, хахах stackoverflow.com/questions/56667583/…
Вы можете использовать цепочку обещаний, синтаксис Promise.all или синтаксис async/await
:
Цепочка обещаний:
const GetAllApple = (req, res) => {
const list = []
Ipad.find()
.then(data => {
list.push(data)
return Mac.find()
})
.then(data => {
list.push(data)
return Accessories.find()
})
// ...
.then(data => {
list.push(data)
console.info(list)
res.send(list)
})
.catch(err => {
console.info(err)
res.status(500).send(err)
})
}
Обещание.все
const GetAllApple = (req, res) => {
Promise.all([
Ipad.find(),
Mac.find(),
// ...
])
.then(list => {
console.info(list)
res.send(list)
})
.catch(err => {
console.info(err)
res.status(500).send(err)
})
}
асинхронно/ожидание
const GetAllApple = async (req, res) => { // async function
try {
const ipads = await Ipad.find() // await
const macs = await Mac.find()
// ...
res.send([ipads, macs]) // or res.send([...ipads, ...macs])
} catch(err) {
console.info(err)
res.status(500).send(err)
}
}
Это не работает. Это дает мне
res is not a function
, но я попробовал ваш ответ, что-то вроде этого ``` Accessories.find() .then(data => {const item = res.json(data) list.push(item)}) .catch(err = > console.info(err)) ```, но по-прежнему выдает тот же вывод, что и в моем первом фрагменте кода.