Как избежать лишних обещаний написания кода?
У меня есть файл, где несколько функций экспорта, которые вызываются из API, и каждый из этих методов сделает некоторые get / post внутри функции. поэтому мои вопросы к Promise.all, которые кажутся мне излишними, есть ли лучший подход для достижения этого с использованием одного частного обработчика методов, который может быть реализован или вызван из каждой из этих функций экспорта и ответа возврата.
main.ts
export function getUser(req: Request, res: Response) {
const p1 = Promise.resolve("data1");
const p2 = Promise.resolve("data2");
Promise.all([p1,p2])
.then(function(results) {
res.json(results);
})
.catch(function(e) {
console.log(e)
});
}
export function getRanks(req: Request, res: Response) {
const p1 = Promise.resolve("data3");
const p2 = Promise.resolve("data4");
Promise.all([p1,p2])
.then(function(results) {
res.json(results);
})
.catch(function(e) {
console.log(e)
});
}
2 ответа
Вы можете делать именно то, что вы написали - создать функцию, которая выполняет общую обработку.
export function getUser(req: Request, res: Response) {
const p1 = Promise.resolve("data1");
const p2 = Promise.resolve("data2");
sendResponse(req, res, [p1,p2]);
}
export function getRanks(req: Request, res: Response) {
const p1 = Promise.resolve("data3");
const p2 = Promise.resolve("data4");
sendResponse(req, res, [p1,p2]);
}
function sendResponse(req, res, promises) {
Promise.all(promises)
.then(function(results) {
res.json(results);
})
.catch(function(e) {
console.log(e)
});
}
PS: у вас должно быть немного res
обработка в.catch (res.end()
или же res.status(500); res.json({error: e})
) в противном случае запрос будет зависать в течение 30-90 секунд (в зависимости от ваших настроек)
В случае p1
и т. д. обещания действительно созданы Promise.resolve
это может быть опущено; Promise.all
принимает обычные значения.
Это может быть написано с async..await
более кратким образом:
export async function getUser(req: Request, res: Response) {
...
try {
const results = await Promise.all([p1, p2]);
res.json(results);
} catch (e) {
console.log(e)
}
}
На этом этапе функции не нужно сушить дальше.