代码之家  ›  专栏  ›  技术社区  ›  Shantanu Tomar

在Mongoose中执行CRUD操作时异步/等待

  •  1
  • Shantanu Tomar  · 技术社区  · 6 年前

    我正在使用执行删除操作 findByIdAndRemove Mongoose查询方法,并希望确保返回已删除的文档。我搜索了一下,发现我们通过了一个回调 查找并删除 我们经过的地方 err, doc args 如果删除成功,则在文档中返回已删除的值,我们可以从fn调用返回该值。但是我有点困惑 async and await . 我有 deleteUserTask 内部调用的FN async deleteUserTask 以承诺为基础并期望得到承诺的FN,当 resolved (.then) 我可以得到被删除的任务的值。

    我不知道如何从我的 异步删除用户任务 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));
    }
    

    任务服务

    async function deleteUserTask(id) {
      return await Task.findByIdAndRemove(id, function(err, doc) {
        if (err) {
          return err;
        }
      });
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Estus Flask    6 年前

    回调不应与 findByIdAndRemove 以防承诺被使用。应该是:

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

    在这一点上,使用 async 功能,可简化为:

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