Что будет быстрее из следующего кода,и как вообще правильнее?
Смотрите
function plusCashAndBank(id, amountCash, amountBank) {
let promise = [
Users.addCash(id, amountCash),
Users.addBank(id, amountBank)
]
Promise.all(promise)
}
Или
const user = User.s.findOne({ where: { user_id: 1327621767216 } })
user.cash += 1
user.bank += 1
await user.save()
Что быстрее и правильнее?По сути Promise.all выполняет промисы параллельно,как я понимаю.А в массиве промисов оба промиса выполняют запрос в бд,то есть 2 запроса в бд параллельно.Возможно я плохо объяснил,напишите если есть вопросы,пожалуйста
Вы бы хоть решаемую задачу как-то описали...
Вообще если речь идёт о финансовых операциях (на что намекает имя метода) то с ними в принципе лучше работать по-другому, организуя лог транзакций
Flying, смотрите.Допустим есть две функции.Они обе выполняют запрос в бд и возвращают промис.Как будет более правильно,создать массив из вызовов этих функций и поместить его в Promise.all,или просто сделать один запрос в бд?
kirick kirick, Здесь, очевидно, всё будет зависеть от логики вашего приложения:
Если, к примеру, это выборка данных и вам нужны данные из обоих запросов для продолжения работы - то придётся ждать выполнения обоих.
Если данные вам нужны не сразу и могут обрабатываться независимо - то можно ждать их по отдельности.
Если вы можете сделать один запрос к базе, а не два - смотрите планы запросов на предмет их эффективности в обоих сценариях.
Если это вставка / обновление и вам не нужны результаты (к примеру last inserted id в случае mysql, хотя у вас, судя по примеру, что-то вроде mongo), то можно вообще не ждать.
Поэтому не зная конкретной ситуации, породивший ваш вопрос, ответить однозначно не представляется возможным.
В примерах, приведённых в вашем вопросе ситуации не эквивалентны т.к. в конкурентной среде при отсутствии транзакции обновление представленное во втором варианте может привести к потере данных, хотя что делают функции в первом примере - тоже не очень ясно.