Ниже приведен мой стилизованный код:
let the_function = (req, res, next) => {
Promise
.map(promises_params, (x) => {
return get_promise(x);
}, {concurrency: 20}
).then((values) => {
let reduceFunc = (acc, currV, currI) => {
if (something_bad) {
next(new Error("something bad happened");
return;
} else {
return acc;
}
};
let result = values.reduce(reduceFunc,[]);
res.send(result);
}).catch((err) => {
res.send(err);
});
};
Идея состоит в том, что я выполняю кучу обещаний, а затем уменьшаю значения, которые получаю, до одного объекта, который затем отправляю обратно пользователю.
Когда something_bad
происходит в пределах функции уменьшения reduceFunc
, я хотел бы получить надлежащую ошибку, отправленную обратно пользователю. Но в моей текущей настройке сервер node.js не работает и должен перезагрузиться после того, как я получу:
_http_outgoing.js:494
throw new ERR_HTTP_HEADERS_SENT('set');
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
, и пользователь получит ошибку, которая не та, которую я хотел бы, чтобы она увидела.
Как убедиться, что ошибка, которую я хочу видеть пользователю, выводится чисто, не убивая при этом сервер?