Node.js Sequelize findOrCreate循环找不到新创建的行?
为了简单起见,我将把这个问题简化。我需要根据字符串值(不能是主键/id)查找或创建行。它必须在循环中完成,所以它必须是异步的。表中可能已经存在一个值 假设我有这样一个数组:Node.js Sequelize findOrCreate循环找不到新创建的行?,node.js,sequelize.js,Node.js,Sequelize.js,为了简单起见,我将把这个问题简化。我需要根据字符串值(不能是主键/id)查找或创建行。它必须在循环中完成,所以它必须是异步的。表中可能已经存在一个值 假设我有这样一个数组: const arrayOfArtistNames = ['Eminem', 'Eminem', 'Eminem', 'Biggie', 'Dr. Dre', 'Dr. Dre', 'Biggie'] arrayOfArtistNames.map(name => findOrCreateArtist(name)) c
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
它重复了多少次,重复了多少次,似乎没有任何押韵或理由
如何让sequelize findOrCreate检查我们刚刚创建的值?是否有某种异步钩子或选项我没有在查询中抛出?
async wait
在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);
工作得很有魅力。谢谢Vivek!嘿,在某些情况下,这实际上仍然不起作用。假设我正在尝试更新一个key_count变量,因此每次迭代一个唯一的keyname时,数据库计数应该增加一个。在我的例子中,Eminem应该在+3之前更新,但实际上只更新一次(我认为查询发生得太快太同步了?)。
const data = await Promise.all(arrayOfArtistNames.map(name => findOrCreateArtist(name)));
console.log(data)