假设我们有一个控制器,该控制器从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有点愚蠢的实现,但我只是为了理解差异而添加。
答案 0 :(得分:1)
如果要同时执行这些操作,则可以使用Promise.all()
来并行化功能。
喜欢
await Promise.all([db.save(resp_), Promise.resolve(1).then(()=>res.json(resp_))]);`
或者,如果您不在乎是否保存数据,那么选择2并不是那么糟糕的选择。