gpt4 book ai didi

node.js - Sequelize findOrCreate 循环找不到新创建的行?

转载 作者:行者123 更新时间:2023-12-03 22:26:42 29 4
gpt4 key购买 nike

为简单起见,我将其简化。我需要根据字符串值(不能是主键/ID)来查找或创建行。它必须在一个循环中完成,所以它必须是异步的。其中一个值也可能已经存在于我们的表中。

假设我有一个这样的数组:

const arrayOfArtistNames = ['Eminem', 'Eminem', 'Eminem', 'Biggie', 'Dr. Dre', 'Dr. Dre', 'Biggie']

arrayOfArtistNames.map(name => findOrCreateArtist(name))

const findOrCreateArtist = async (artist_name) => {
return await ArtistIA.findOrCreate({
where: {
artist_name: artist_name
},
defaults: {
artist_bio: ""
}
}).then((response) => {
response = JSON.parse(JSON.stringify(response));
return response[0];
}).catch(err => {
console.log("uploads.js", 273, err);
});
};

我的问题是我的数组中有多个重复值。并且当数组获得“Eminem”的第二次迭代时,它不是从字面上找到刚刚创建的行 sequelize,而是创建另一个。

它重复了多少次和多少次似乎没有任何押韵或理由。

我如何告诉 sequelize findOrCreate 检查我们刚刚创建的值?是否有某种我没有在查询中抛出的异步钩子(Hook)或选项?

最佳答案

async await无法在 map/forEach... 中使用,你必须使用简单的 for 循环:

const arrayOfArtistNames = ['Eminem', 'Eminem', 'Eminem', 'Biggie', 'Dr. Dre', 'Dr. Dre', 'Biggie']
const ArtistObjects = [];
for(let i = 0 ; i < arrayOfArtistNames.length ; i++) {
ArtistObjects.push(await findOrCreateArtist(arrayOfArtistNames[i]));
}
console.log(ArtistObjects);


const data = await Promise.all(arrayOfArtistNames.map(name => findOrCreateArtist(name)));
console.log(data)

关于node.js - Sequelize findOrCreate 循环找不到新创建的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57599494/

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