gpt4 book ai didi

javascript - Sequelize 查找或创建项目列表

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

我是 Sequelize 的新手,不太了解看起来但没有找到任何具体的东西

// API Method
function SeederApi(req: Request, res: Response) {
let request = req.body;
let _model_methods = new ModelMethod();
request.forEach((obj: any) => {
const condition = { name: obj.username };
const value = {
name: obj.username ,
short_text: obj.short_txt
};
_model_methods.findorCreate(condition, value)
.then((resp: any) => {
const _response = resp.get({ plain: true });
console.log(_response);
});
});
return res.status(200).send("Created");
}
export class ModelMethod{

init(){}

findorCreate = (condition: any, value: any) => {
return Model
.findOne({ where: condition })
.then((obj : any) => {
if(obj){ return obj }
return RiskFactors.create(value);
})
}
}


这里的问题是当列表中有 2 个或更多具有相同用户名的条目时,它应该返回 obj 而不是创建一个。如果请求中只有一项,则它工作正常。但是当我有多个可能具有相同用户名的项目时。它最终会创建重复的条目,因为 sequelize 查询是异步的,但我的循环不是。

我明白这里的问题,我不知道如何处理它。

我在这里先向您的帮助表示感谢。

最佳答案

不要在其迭代中将 forEach 与异步调用一起使用。
使用通常的 for:

for (const obj:any of request) {
const condition = { name: obj.username };
const value = {
name: obj.username ,
short_text: obj.short_txt
};
const resp = await _model_methods.findorCreate(condition, value);
const _response = resp.get({ plain: true });
console.log(_response);
}

关于javascript - Sequelize 查找或创建项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61511678/

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