首页 > 解决方案 > 如何避免冗余代码编写承诺?

问题描述

我有一个文件,其中从 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)
        });

}

标签: node.jspromiserequest-promise

解决方案


你可以完全按照你写的去做——创建进行一般处理的函数。

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 秒(根据您的设置)


推荐阅读