Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在mongoose中执行CRUD操作时异步/等待_Javascript_Node.js_Asynchronous_Mongoose_Async Await - Fatal编程技术网

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

Javascript 在mongoose中执行CRUD操作时异步/等待,javascript,node.js,asynchronous,mongoose,async-await,Javascript,Node.js,Asynchronous,Mongoose,Async Await,我正在使用findbyiandremovemongoose查询方法执行删除操作,并希望确保返回已删除的文档。我在谷歌上搜索了一下,发现我们向findbyiandremove传递了一个回调,其中传递了err,doc args,如果删除成功,删除的值将在doc中返回,我们可以从fn调用返回。但我对异步和等待有些困惑。我有deleteUserTaskfn,它在内部调用async deleteUserTaskfn,它是基于承诺的,并期望得到一个承诺,当解决(.then)时,我可以得到已删除任务的值 我不

我正在使用
findbyiandremove
mongoose查询方法执行删除操作,并希望确保返回已删除的文档。我在谷歌上搜索了一下,发现我们向
findbyiandremove
传递了一个回调,其中传递了
err,doc args
,如果删除成功,删除的值将在doc中返回,我们可以从fn调用返回。但我对
异步和等待
有些困惑。我有
deleteUserTask
fn,它在内部调用
async deleteUserTask
fn,它是基于承诺的,并期望得到一个承诺,当
解决(.then)
时,我可以得到已删除任务的值

我不知道如何从我的
async deleteUserTask
fn返回doc的值,该值将在
中解析。然后
承诺,我可以使用它吗

使用下面的方法,返回的值是
null
,因为我根本不返回文档值

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;
    }
  });
}

在使用承诺的情况下,回调不应与
findbyiandremove
一起使用。应该是:

async function deleteUserTask(id) {
  return await Task.findByIdAndRemove(id);
}
此时,使用
async
函数没有任何好处,可以简化为:

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

谢谢因此,我想了解一下,对于其他mongoose查询操作,如findOne、save、findOneAndUpdate、find等,不需要异步调用,这些调用可以是简单的fn?当我查询mongoDB时,我不需要一个异步调用,稍后将解决这个问题。调用仍然是异步的。deleteUserTask是异步的,并返回一个承诺。在这种情况下,不需要使用
async
函数,因为使用
await
,它所做的只是返回一个承诺。如果没有回调,我如何处理findbyiandremove调用中的错误?中间件中已经有
catch
。它会遭到拒绝。除此之外,你还需要额外处理吗?是的,我知道会处理的。还有什么方法可以不用findbyiandremove fn中的回调来处理它?谢谢