Задать вопрос
@uroot

Почему три варианта одной и той же функции работают по-разном?

Объясните мне почему три варианта одной и той же функции работают по-разному.

// Есть массив объектов:
[{
  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?

Спасибо за объяснение!
  • Вопрос задан
  • 30 просмотров
Подписаться 1 Сложный 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы