Node.js express.js不影响响应

Node.js express.js不影响响应,node.js,express,async-await,Node.js,Express,Async Await,假设我们有一个控制器,它从第三方服务获取数据,将数据保存到db并向客户端发送响应: const findUser = async (req, res, next) => { if (req.params.username) { const resp_ = await fetchFunction (req.params.username) /* This part is where I have problem*/ Option 1: await db.

假设我们有一个控制器,它从第三方服务获取数据,将数据保存到db并向客户端发送响应:

const findUser = async (req, res, next) => {
  if (req.params.username) {
    const resp_ = await fetchFunction (req.params.username)
    /* This part is where I have problem*/
    Option 1: 
    await db.save(resp_);
    Option 2:
    db.save(resp_);
    Option 3: 
    db.save(resp_).then(param => /*Do nothing*/ clg(param)).catch(err => clg(err))

    res.json(resp_)
  }
};
我不想在这个控制器中阻止异步流,如果我使用选项1,它将等待db.save()函数完成,我想我无法用async/await实现这个行为。哪种方法更可取,或者是否有其他方法可以在不阻塞流的情况下发送对客户端的响应


[编辑]:选项2是一种愚蠢的实现,但我只是添加它来理解不同之处。

如果您想同时执行这些操作,那么您可以使用并行化函数的
Promise.all()

await Promise.all([db.save(resp_), Promise.resolve(1).then(()=>res.json(resp_))]);`

或者,如果您不关心数据是否被保存,那么选项2也不是一个坏的选择。

如果我用try/catch块将这一行括起来,我将能够从函数数组中捕获错误,因为如果函数抛出错误,所有承诺也将抛出错误。然后您可以通过try-catch块进行捕获。但我保证,两者皆有,否则一事无成。也就是说,如果一个函数抛出错误,它将在不等待另一个函数的情况下抛出错误。