Как избежать лишних обещаний написания кода? - PullRequest
0 голосов
/ 27 июня 2018

У меня есть файл, в котором несколько функций экспорта вызываются из 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 ]

0 голосов
/ 27 июня 2018

В случае, если 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)
  }
}

На этом этапе функции больше не нужно сушить.

0 голосов
/ 27 июня 2018

Вы можете сделать именно то, что написали - создать функцию, которая выполняет общую обработку.

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 секунд (в зависимости от ваших настроек)

...