Я использую Sequelize в качестве ORM и библиотеку обещаний Bluebird.
В приложении-рецепте, которое я создаю, я написал несколько асин * c функций, которые после написания нового рецепта были написаны. в базу данных, и при передаче массива ингредиентов со стороны клиента проверяет, существует ли каждый из них в базе данных. Затем он записывает каждый ингредиент в базу данных, если он еще не существует, и, наконец, записывает ссылку на идентификатор рецепта и каждый из его идентификаторов ингредиента в таблице соединений.
Все это работает без проблем, но я не могу понять, как заставить ингредиенты записывать в базу данных в том же порядке, в котором они записаны в исходном массиве? Я думаю, что это может быть связано с тем, как я использую async / await, или с тем, что я сопоставил каждый элемент массива ингредиентов?
Мой код здесь:
var ingredients = req.body.ingredients
const recipe = await Recipe.create(req.body.information)
.then(async function(createdRecipe) {
// Adding ingredients
ingredients.map(async function (ingredient) {
console.log(ingredient)
// Query the db to see if there are any matching ingredients already
Ingredient.count({
where: {
title: ingredient
}
}).then(async function (count) {
console.log('here', ingredient)
// Does already exist
if (count > 0) {
// Return this data into the function
return Ingredient.findOne({
where: {
title: ingredient
}
})
} else {
// Create the ingredient and return this
return Ingredient.create({
title: ingredient
})
}
}).then(async function (createdIngredient) {
// Add this data into the RecipeIngredient table
return createdRecipe.addIngredient(createdIngredient)
}).then(function (added) {
// Once this is all done, return to home dashboard
res.send(recipe)
})
})
}
)
В первом файле console.log ингредиенты печатаются в правильном порядке. К тому времени, когда мой код попадет во второй файл console.log, они будут в неправильном порядке.
Любая помощь будет принята с благодарностью - спасибо!