Я пытаюсь обработать два запроса друг в друге.
exports.get_users = (req, res) => {
SubscriptionPlan.find()
.then((result) => {
if (!result) {
return res.status(400).json({ message: "unable to process" });
}
let modifiedData = [];
result.forEach(async (data) => {
if (data.processStatus === "active") {
await Users.findById(data.userId).then(
(response) => {
console.log(response)
modifiedData.push(response);
res.json(modifiedData)
}
);
}
});
})
.catch((err) => console.log(err));
};
Моя проблема возникает, если я придерживаюсь этого подхода, то получаю ошибку для отклонения обещания:
node:15036) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:470:11)
а также ответ массива modifiedData
, который я получаю в почтальоне, только один объект из массива длины 3. Оператор console.log(response)
возвращает 3 объекта, которые мне нужны, чтобы pu sh в новый массив.
Если я изменю свой код таким образом, чтобы разрешить отклонение,
exports.get_users = (req, res) => {
SubscriptionPlan.find()
.then((result) => {
if (!result) {
return res.status(400).json({ message: "unable to process" });
}
let modifiedData = [];
result.forEach(async (data) => {
if (data.processStatus === "active") {
await Users.findById(data.userId).then(
(response) => {
console.log(response)
modifiedData.push(response);
}
);
}
});
res.json(modifiedData)
})
.catch((err) => console.log(err));
};
он вернет мне массив emtpy в качестве ответа для почтальона. Мне известно, что я застрял между асин c характером JS, но не могу решить эту проблему.
PS. Использование asyn c -wait здесь для меня бесполезно.
Любая ранняя помощь будет оценена.