gpt4 book ai didi

javascript - 如何在批量导入中使用sequelize findorcreate?

转载 作者:行者123 更新时间:2023-12-01 01:56:58 31 4
gpt4 key购买 nike

我尝试在 CSV 导入中使用 findOrCreate 函数来防止使用同一电子邮件地址创建多个用户,但它不起作用。

我将 CSV 文件中的所有行导入到内存中:

importableCsvRows.forEach(row => importData(row))

然后我迭代每一行以导入用户:

function importData (row) {
const name = row[0]
const email = row[1]
addUser(name, email)
}

在 addUser 函数中我使用 findOrCreate:

function addUser (name, email) {
return new Promise(function (resolve, reject) {
const user = models.users.findOrCreate({
where: {email: email},
defaults: { email: email, name: name }
})
.then(u => {
return resolve(u)
})
.catch(err => {
console.log('ERROR', err)
return reject(err)
})
})
}

问题是多个事务开始,因为 findOrCreate 是异步的,所以在第一行完成处理之前,下一行开始。

最佳答案

forEach 中,您需要等到数据库事务完成才能开始导入下一个用户。

最简单的方法是 await importData函数:

async function importData (row) {
const name = row[0]
const email = row[1]
try {
await addUser(name, email)
} catch(err) {
//console.log?
}
}

此外,在addUser中:不需要返回自己的Promise。只需返回 promise findOrCreate 返回:

function addUser (name, email) {
return models.users.findOrCreate({
where: {email: email},
defaults: { email: email, name: name }
})
})
}

关于javascript - 如何在批量导入中使用sequelize findorcreate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50942594/

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