node.js - 如何避免冗余代码编写承诺?
问题描述
我有一个文件,其中从 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)
});
}
解决方案
你可以完全按照你写的去做——创建进行一般处理的函数。
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 秒(根据您的设置)
推荐阅读
- php - 如何在 laravel api 或颤振视图上转换 yyyy-mm-ddthh:mm:ss.sssz?
- asp.net-core-mvc - 在 ASP.NET Core MVC 的 PartialView 中使用 Ajax 后选择模式为空
- clojure - 如何用 Leiningen 运行图书馆的`main`?
- sql - 从邀请表中查找最后一行
- java - 只是 JTextField 中的数字
- javascript - 如何在同一页面上多次添加相同的轮播?
- python - 错误:包“Unidecode”需要不同的 Python:2.7.18 不在“>=3.5”中
- image - 无论图像大小如何,图像始终只需 5 秒即可加载 (MAMP)
- python - 错误:azure_cosmosdb_container 类型中缺少强制属性值
- c - 为什么包含守卫不需要反斜杠是多行的?