Sequelize、findOrCreate + findAll 意外行为
Sequelize, findOrCreate + findAll unexpected behavior
我正在尝试从一只狗身上获取数据 API,我只想将它们的性情添加到我的数据库中。我尝试使用一些循环和拆分来隔离数据,然后使用
findOrCreate() 只添加那些不在数据库中的人,之后我使用 findAll()
从数据库中获取该信息以使用 expressJS 发送它。
当我转到执行所有这些的路线和路线时,出现意外行为
只给出大约一半的气质(它们是 124,它显示大约 54),然后当我刷新页面时它显示所有 124。数据库一次性填充了所有 124 个,所以问题出在 findAll()
这是隔离气质并将它们附加到数据库的功能:
module.exports = async () => {
const info = await getAllDogs();
info.forEach(async (element) => {
const { temperament } = element;
if (temperament) {
const eachOne = temperament.split(", ");
for (i in eachOne) {
await Temperament.findOrCreate({
where: { name: eachOne[i] },
});
}
}
});
};
这是我点击 expressJS sv 获取信息时执行的代码
exports.temperaments = async (req, res) => {
try {
await getTemperaments(); //this function is the above function
} catch (error) {
res.status(500).send("something gone wrong", error);
}
const temperamentsDB = await Temperament.findAll();
res.json(temperamentsDB);
};
正如您所见,最后一个函数执行将所有数据附加到数据库的函数,然后使用 findAll 和 res.json()
发送它
forEach
是一种同步方法,因此它不会等待异步回调的结果。您需要执行 for of
才能等待所有结果:
module.exports = async () => {
const info = await getAllDogs();
for (element of info) {
const { temperament } = element;
if (temperament) {
const eachOne = temperament.split(", ");
for (i in eachOne) {
await Temperament.findOrCreate({
where: { name: eachOne[i] },
});
}
}
}
};
我正在尝试从一只狗身上获取数据 API,我只想将它们的性情添加到我的数据库中。我尝试使用一些循环和拆分来隔离数据,然后使用 findOrCreate() 只添加那些不在数据库中的人,之后我使用 findAll() 从数据库中获取该信息以使用 expressJS 发送它。 当我转到执行所有这些的路线和路线时,出现意外行为 只给出大约一半的气质(它们是 124,它显示大约 54),然后当我刷新页面时它显示所有 124。数据库一次性填充了所有 124 个,所以问题出在 findAll() 这是隔离气质并将它们附加到数据库的功能:
module.exports = async () => {
const info = await getAllDogs();
info.forEach(async (element) => {
const { temperament } = element;
if (temperament) {
const eachOne = temperament.split(", ");
for (i in eachOne) {
await Temperament.findOrCreate({
where: { name: eachOne[i] },
});
}
}
});
};
这是我点击 expressJS sv 获取信息时执行的代码
exports.temperaments = async (req, res) => {
try {
await getTemperaments(); //this function is the above function
} catch (error) {
res.status(500).send("something gone wrong", error);
}
const temperamentsDB = await Temperament.findAll();
res.json(temperamentsDB);
};
正如您所见,最后一个函数执行将所有数据附加到数据库的函数,然后使用 findAll 和 res.json()
发送它forEach
是一种同步方法,因此它不会等待异步回调的结果。您需要执行 for of
才能等待所有结果:
module.exports = async () => {
const info = await getAllDogs();
for (element of info) {
const { temperament } = element;
if (temperament) {
const eachOne = temperament.split(", ");
for (i in eachOne) {
await Temperament.findOrCreate({
where: { name: eachOne[i] },
});
}
}
}
};