如何避免多余的代码编写承诺?

时间:2018-06-27 15:16:07

标签: node.js promise request-promise

我有一个文件,其中有多个从api调用的导出函数,这些方法中的每一个都会在函数内部进行一些获取/发布。 所以我的问题是关于Promise的。对我来说,所有看起来多余的是,有一个更好的方法是使用一个私有方法处理程序来实现此目的,该处理程序可以从每个导出函数和返回响应中实现或调用。

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 个答案:

答案 0 :(得分:1)

您可以完全按照编写的内容进行操作-创建执行常规处理的功能。

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(resres.end())中进行一些res.status(500); res.json({error: e})处理,否则请求将挂起30-90秒(根据您的设置)

答案 1 :(得分:0)

如果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)
  }
}

此时,无需进一步干燥函数。