express.js而不影响响应

时间:2019-01-22 19:44:29

标签: node.js express async-await

假设我们有一个控制器,该控制器从3rd party服务获取数据,将数据保存到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有点愚蠢的实现,但我只是为了理解差异而添加。

1 个答案:

答案 0 :(得分:1)

如果要同时执行这些操作,则可以使用Promise.all()来并行化功能。

喜欢

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

或者,如果您不在乎是否保存数据,那么选择2并不是那么糟糕的选择。