如何避免冗余代码编写承诺?
How to avoid redundant code writing promises?
我有一个文件,其中包含从 api 调用的多个导出函数,并且这些方法中的每一个都会在函数内部生成一些 get/post。
所以我的问题是 Promise.all 在我看来是多余的 是否有更好的方法来使用一个私有方法处理程序来实现此目的,该处理程序可以从每个导出函数和 return 响应中实现或调用。
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:您应该在 .catch(res.end()
或 res.status(500); res.json({error: e})
)中进行一些 res
处理,否则请求将挂起 30-90 秒(基于在你的设置上)
万一p1
等promise真的创建了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)
}
}
此时函数不需要进一步干燥。
我有一个文件,其中包含从 api 调用的多个导出函数,并且这些方法中的每一个都会在函数内部生成一些 get/post。 所以我的问题是 Promise.all 在我看来是多余的 是否有更好的方法来使用一个私有方法处理程序来实现此目的,该处理程序可以从每个导出函数和 return 响应中实现或调用。
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:您应该在 .catch(res.end()
或 res.status(500); res.json({error: e})
)中进行一些 res
处理,否则请求将挂起 30-90 秒(基于在你的设置上)
万一p1
等promise真的创建了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)
}
}
此时函数不需要进一步干燥。