Объясните мне почему три варианта одной и той же функции работают по-разному.
// Есть массив объектов:
[{
name: 'dismissal_reason_id',
options: lookupDismissalReasonsByGroup()
}]
// Сама функция lookupDismissalReasonsByGroup:
function lookupDismissalReasonsByGroup () {
const method = dismissalReasons.lookupDismissalReasonsByGroup
return function(_, props) {
return function ({ text }) {
const id = props && props.dismissal_reason_group_id ? props.dismissal_reason_group_id : null
return method({ id, search: text, limit: 100 })
}
}
}
// Далее в Vue 2 в цикле создаются компоненты и вызывается функция options:
const options = this.field.options(this.currentValue, this.value)
Данный код работает. Все отлично. Но до этого я перебирал разные походы, которые не дали желаемый результат. Почему - я до конца не понимаю. Прошу объяснить почему и как можно их исправить.
Второй подход с явной передачей параметров в lookupDismissalReasonsByGroup:
[{
name: 'dismissal_reason_id',
options: (_, props) => lookupDismissalReasonsByGroup(props)
}]
function lookupDismissalReasonsByGroup (props) {
const method = dismissalReasons.lookupDismissalReasonsByGroup
return function() {
return function ({ text }) {
const id = props && props.dismissal_reason_group_id ? props.dismissal_reason_group_id : null
return method({ id, search: text, limit: 100 })
}
}
}
const options = this.field.options(this.currentValue, this.value)
Как результат - запрос даже не ушёл на бэк, просто потерялся в замыкании. Я тут не могу понять почему так. Как это мы просто не дошли к
return method({ id, search: text, limit: 100 })
, хотя функция просто вызывает другую функцию?
В третьем варианте отличается только функция lookupDismissalReasonsByGroup:
function lookupDismissalReasonsByGroup (props) {
return dismissalReasons.lookupDismissalReasonsByGroup({ id: props && props.dismissal_reason_group_id ? props.dismissal_reason_group_id : null })
}
Как результат - вернулся промис, но запрос на бэк уже ушёл. Но почему промис не развернулся, ведь тут же
return
?
Спасибо за объяснение!