Последствия использования сложных объектов в качестве параметра по умолчаниюJavascript

Форум по Javascript
Ответить
Anonymous
 Последствия использования сложных объектов в качестве параметра по умолчанию

Сообщение Anonymous »

Я хочу использовать очень сложный объект в качестве параметра по умолчанию. Например, в Prisma orm вы можете обернуть несколько вызовов DB в транзакцию:

Код: Выделить всё

this.prisma.$transaction(async (tx) => {
await tx.table1.create()
await tx.table2.create()
}
< /code>
Эти внутренние вызовы БД могут быть сложными, поэтому я могу захотеть для них вспомогательные функции. Тем не менее, вспомогательные функции могут быть вызваны из многих мест и могут использоваться или не использоваться внутри транзакции. Чтобы решить это, я при желании передаю транзакцию и использую ее, если она существует: < /p>
// My function with a complex default param
async createModelIfNotExists(name, color, prisma = this.prisma) {
return await prisma.upsert({...})
}

...

// Call from within transaction, and use transaction's prisma client:
this.prisma.$transaction(async (tx) => {
this.createModelIfNotExists("new model 1", "blue", tx)
...
})

// Call on its own, and it will use the prisma object attached to "this"
this.createModelIfNotExists("new model 2", "green")
Обратите внимание, что tx является очень большим и сложным объектом. Он управляет подключением DB и отслеживает все мои модели. Если бы я писал Python, будет , потому что Python старается быть умным и инициализирует параметр по умолчанию, даже если вы не используете функцию. Если бы я написал это как Python, подпись функции выглядела бы так: < /p>

Код: Выделить всё

// The default param is now instantiated in the function
async createModelIfNotExists(name, color, prisma = null) {
prisma = prisma ?? this.prisma
return await prisma.upsert({...})
}
Я обеспокоен потенциальным накладным накладным расходом, когда он не используется, даже когда он не используется.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... -parameter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»