Асинхронизация / ожидание при выполнении операций CRUD в мангусте - PullRequest
0 голосов
/ 26 января 2019

Я выполняю операцию удаления, используя findByIdAndRemove метод запроса mongoose, и хочу убедиться, что удаленный документ будет возвращен. Я прогуглил это и обнаружил, что мы передаем обратный вызов findByIdAndRemove, в котором мы передаем err, doc args, и если удаление прошло успешно, удаленное значение возвращается в doc, которое мы можем вернуть из вызова fn. Но я несколько запутался в async and await. У меня есть deleteUserTask fn, который внутренне вызывает async deleteUserTask fn, который основан на обещаниях и ожидает взамен обещания, которое, когда resolved (.then), я могу получить значение задачи, которая была удалена.

Я не уверен, как вернуть значение doc из моего async deleteUserTask fn, которое затем будет разрешено в .then обещании, и я могу его использовать?

При подходе ниже возвращаемое значение равно null, поскольку я вообще не возвращаю значение doc.

function deleteUserTask(req, res, next) {
  taskService
    .deleteUserTask(req.params.taskId)
    .then(task => {
      console.log(
        "Delete task request took " + (moment.now() - req.requestTime + " ms")
      );
      // below gives null
      console.log(task);
      res.json({ task });
    })
    .catch(err => next(err));
}

taskService.js

async function deleteUserTask(id) {
  return await Task.findByIdAndRemove(id, function(err, doc) {
    if (err) {
      return err;
    }
  });
}

1 Ответ

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

Обратный вызов не должен использоваться с findByIdAndRemove в случае использования обещаний. Должно быть:

async function deleteUserTask(id) {
  return await Task.findByIdAndRemove(id);
}

На данный момент нет никакой выгоды от использования функции async, ее можно упростить до:

function deleteUserTask(id) {
  return Task.findByIdAndRemove(id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...