Javascript 处理异步内部多个wait的正确方法

Javascript 处理异步内部多个wait的正确方法,javascript,node.js,Javascript,Node.js,我有一个异步函数(控制器),里面有多个wait。例如,我可以有这样的东西: exports.check_in = async (req, res, next) => { try { const place= await Place.findOne({_id: req.params.placeId}); // MY SECOND DEPENDS ON THE RESULT OF THE FIRST ONE const area= await Area.find

我有一个异步函数(控制器),里面有多个wait。例如,我可以有这样的东西:

exports.check_in = async (req, res, next) => {
try {   
    const place= await Place.findOne({_id: req.params.placeId});
    // MY SECOND DEPENDS ON THE RESULT OF THE FIRST ONE
    const area=  await Area.findOne(_id: place.areaId);
    const client = await Client.findOne({_id: req.body.clientId});

    // BUSINESS LOGIC HERE

    } catch (error) {
        next(error);
    }
}
因此,我的疑问是:

  • 如何处理依赖于第一个等待的第二个等待的情况,因为如果第一个等待返回[]或null,它将因place.areaId而中断
  • 第二,如果我有多个控制器,需要查询位置、区域和客户机,那么为每个控制器创建函数并在主控制器内调用它们是一种解决方案。最好的方法是什么
  • 如果我需要在数据库中写入3个独立的文档,如何确保所有3个都已执行?我不希望其中一个失败,或者如果失败了,我希望确保回滚另一个。像这样的

    // new client data, new area data, new place data
    await client.save();
    await area.save();
    await place.save();
    

  • 我认为在调用函数1之前,可以使用
    &&
    操作符检查数据-如果第一个结果错误,会发生什么?它应该用404还是什么来回应?阐明您的需求并从中着手。这实际上并不特定于async/await,因为它已经产生了类似于同步的控制流。这些是编程的基础,使用if/else等的条件分支。2-视情况而定。3-使用错误处理,您描述的是一个事务,Mongo(ose)中的事务支持不是很好(问题甚至没有提到您使用它),依赖本机实现或自己回滚。