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中的回调来处理它?谢谢