express.js без влияния на ответ - PullRequest
0 голосов
/ 22 января 2019

Допустим, у нас есть контроллер, который извлекает данные из сторонней службы, сохраняет эти данные в БД и отправляет ответ клиенту:

const findUser = async (req, res, next) => {
  if (req.params.username) {
    const resp_ = await fetchFunction (req.params.username)
    /* This part is where I have problem*/
    Option 1: 
    await db.save(resp_);
    Option 2:
    db.save(resp_);
    Option 3: 
    db.save(resp_).then(param => /*Do nothing*/ clg(param)).catch(err => clg(err))

    res.json(resp_)
  }
};

Я не хочу блокировать асинхронный поток в этом контроллереесли я использую опцию 1, она будет ждать завершения функции db.save (), и я думаю, что я не смогу реализовать это поведение с помощью async / await.Какой вариант предпочтительнее или есть какой-либо другой способ отправить ответ клиенту, не блокируя поток.

[Правка]: Вариант 2 довольно глупый, но я просто добавил, чтобы понять различия.

1 Ответ

0 голосов
/ 22 января 2019

Если вы хотите выполнять эти операции одновременно, вы можете использовать Promise.all(), который распараллеливает функции.

как,

await Promise.all([db.save(resp_), Promise.resolve(1).then(()=>res.json(resp_))]);`

Или, если вам все равно, будут ли сохранены данные или нет, тогда вариант 2 не так уж плох для выбора.

...