gpt4 book ai didi

express - 多次更新后发送单个响应

转载 作者:行者123 更新时间:2023-12-03 22:40:33 24 4
gpt4 key购买 nike

我有一系列要传递给 API 端点的项目(使用 Sequelize 作为我的 ORM)。我正在尝试迭代每个项目并更新它,但是我得到了一个 Unhandled rejection Error: Can't set headers after they are sent.

stepsController.put = (req, res) => {
const { steps } = req.body;
// Steps is an array of objects that I want to update...
steps.map(step => {
Step.findOne({ where: { id: step.id } })
.then(savedStep =>
savedStep
.update({
order: step.order,
})
.then(success => res.status(200).send(success))
.catch(error => res.send(error))
)
.then(ok => res.status(200).send(ok))
.catch(err => res.send(err));
});
};

我相信这是因为它正在为每个项目发送响应。 Sequelize 的 update 方法是一个 promise 。如何遍历所有项目并确保在发送单个成功响应之前更新所有项目?

最佳答案

There are three ways you can do

  1. Promise.all
  2. Co
  3. Async Await


1)在这里,您可以使用 Promise.all :
stepsController.put = (req, res) => {
const { steps } = req.body;
// Steps is an array of objects that I want to update...
Promise.all(steps.map(step => {
return Step.findOne({ where: { id: step.id } }).then(savedStep =>
return savedStep.update({
order: step.order,
})
.catch(error => error)
).catch(err => err)
}))
.then(ok => res.status(200).send(ok))
.catch(err => res.send(err));
};

2)另一种方法是使用 co :
const co = require('co');

stepsController.put = co.wrap(function* (req, res) => {
try {
const { steps } = req.body;
// Steps is an array of objects that I want to update...
for(let i=0;i<steps.length ; i++) {
let savedStep = yield Step.findOne({ where: { id: steps[i].id } });
if(savedStep)
yield savedStep.update({ order: steps[i].order});
}
res.status(200).send();
}
catch(err){
res.send(err);
}
});

3) 如果您使用的是 Node 8.0+ ,则不需要任何包,您可以直接使用 async await :
stepsController.put = async(req, res) => {
try {
const { steps } = req.body;
// Steps is an array of objects that I want to update...
for(let i=0;i<steps.length ; i++) {
let savedStep = await Step.findOne({ where: { id: steps[i].id } });
if(savedStep)
await savedStep.update({ order: steps[i].order});
}
res.status(200).send();
}
catch(err){
res.send(err);
}
};

关于express - 多次更新后发送单个响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48272754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com