javascript — Вызов функции после коллбэк

Вопрос задан

Изменён 4 месяца назад

Просмотрен 35 раз

Как правильно вызвать функцию после коллбэк?

pay (amount) {
      const data = {
        payment: {
          amount: amount,
          description: 'Оплата',
          created_at: new Date(),
          options: {
            callbacks: {
              result_url: 'https://my-domain.com/result',
              check_url: 'https://my-domain.com/check'
            }
          }
        },
        successCallback: function (item) {
          this.create(item) //при вызове этой функции выдает ошибку, прописанную снизу
        },
        errorCallback: function (item) {
          console.log(item)
        }
      }
      // здесь функция, после завершения которой, выполняются коллбэки.
Я удалила часть }, create (item) { console.log('lll25', item) }

ОШИБКА: TypeError: this.create is not a function at i.successCallback

а нужно чтоб при успешном выполнении оплаты, выполнялся функция create. Можете подсказать мою ошибку? Благодарю заранее

  • javascript
  • vue.js
  • callback
3

У вас при вызове колбэка successCallback создаётся новый контекст, так как вы объявляете функцию при помощи function. Используйте стрелочную функцию для того что бы использовать внешний конекст.

successCallback: (item) => {
   this.create(item)
},

Также здесь вы можете почитать об использовании стрелочных функций.

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Вызов javascript функции при обновлении компонента в JSF — Блог

Порой разработчик приложений на JSF сталкивается с тем, что функциональность предоставляемая создателями framework’а не полностью удовлетворяет потребности. Имеется несколько решений данной проблемы. Одна из них — использование возможностей framework’а для расширения функциональности.  Но сегодня, на конкретном примере, мы рассмотрим небольшой

lifehack, который позволит сократить драгоценное время, используя, возможно, менее лаконичное решение.

Давайте опишем ситуацию в которой мы пришли к тому, что нам не хватает функциональности встроенной в JSF компоненты:

Имеется некий компонент интерфейса. Он может быть как простым тегом, так и множеством  со сложной структурой, вложенностью и пачкой логики.

Также есть необходимость добавить в отображение интерфейса элемента дополнительную функциональность, которая:

А) Является избыточной для уровня модели
Б) Хорошо ложится на client-side сторону и обработку с помощью javascript’а

Часть наших нужд реализуется с помощью имеющихся у компонентов атрибутов (onclick, onchange и прочие), но редко наши желания ограничиваются лишь обработкой действий, совершаемых пользователем над самим компонентом. Требуется ещё и добавлять clientside обработку на события произошедшие извне.

Простым и понятным примером служат зависящие друг от друга selectOneMenu (например список стран, и список городов обновляющийся при смене страны). Хотя в этом примере обработка, скорее всего, будет унесена на serverside.

Но что если обработка компонента должна произойти при загрузке страницы?

А если перерисовку и изменений модели нашего компонента меняет не одно событие, а десятки событий разбросанные по огромному интерфейсу?

Неужели необходимо выискивать все места, которые приводят к update’у нашего и компонента и добавлять туда в соответствующие события вызов нашей функции?

«-Да, не… Мы же вскроемся!» прозвучит в голове разработчика.

Далее, как правило, включается процесс поиска готового решения, которое сократит время на написание кучи повторяющегося кода и избавит от глупых ошибок.

«-Если нам нужно вызывать функцию тогда, когда происходит update компонента, то, скорее всего, разработчики добавили нам атрибут onupdate».

К сожалению не добавили. Поэтому переходим к простому решению, которое удовлетворит наши потребности:

<p:outputPanel>
      <script type="text/javascript">onMyComponentUpdate()</script>
     <!-- Какой-то компонент, требующий вызова javascript функции при перерисовке -->
</p:outputPanel>

 

function onMyComponentUpdate() {
     /* Какой-то код */
}

 

Т.е. если нам нужно, чтобы при update нашего блока/компонента вызывалась наша js функция, а вставлять её вызов во всех местах, что к этому update’у приводит нудно, больно и опасно, то мы просто помещаем во внутрь тега, который будет обновляться тег

<script>, который содержит вызов нашей функции. Теперь когда jsf сделает update нашего компонента, он повторно сделает и вызов нашей функции.

Вот и всё!

Как вызвать функцию в JavaScript?

Как вызвать функцию в JavaScript?

Как вызвать функцию в JavaScript?

share-outline Бесплатный курс Javascript — Освоение основ

Автор Мринал Бхаттачарья

Бесплатно

star 4. 8

Зачислено:

20526

90 009 Бесплатный курс по Javascript — освоение основ

Мринал Бхаттачарья

Бесплатно

Начало Обучение

Что означает вызов функции в JavaScript?

Функции в Javascript — это сегменты кода, выполняющие определенную операцию. Функция может принимать или не принимать аргументы и возвращать результат на основе предоставленного аргумента.

Функции должны вызываться с необходимыми аргументами для выполнения. В этой статье мы увидим, как вызвать функцию в javascript.

Знакомство с call() в Javascript

JavaScript предоставляет метод call(), который принимает необходимые аргументы и заданное значение this.

В JavaScript все функции являются объектными методами, и если какая-либо функция не написана как метод объекта JavaScript, она рассматривается как метод глобального объекта.

Синтаксис метода call() в JavaScript:

Здесь функция — имя_функции. Методы call() принимают два параметра:

  • this: Это объект, на который ссылается функция.
  • аргументов…: Это аргумент функции, который требуется функции. Аргументы являются необязательными и не должны передаваться, если функция не имеет аргументов в своем объявлении.

Метод call() возвращает результат, полученный путем вызова функции с указанным значением this и передачей параметров функции.

Давайте рассмотрим пример того, как мы можем создавать вызовы функций в JavaScript, используя метод call().

Пример: вызов функции с использованием метода call()

Теперь, когда мы знакомы с синтаксисом метода call(), давайте рассмотрим пример, чтобы понять, как метод call в JavaScript можно использовать для создания вызова функции.

Выходные данные

В приведенном выше примере мы определяем квадрат функции, которая принимает один вход и возвращает квадрат числа. Для вызова функции мы использовали метод call() и передали 2 в качестве аргумента функции. В этом случае по умолчанию это глобальный объект.

Пример: создание вызова функции без метода call()

JavaScript позволяет создавать вызовы функций без использования метода call().

Выход

Здесь мы определили функцию sum() и создали вызов функции, не используя метод call() и напрямую вызывая его, используя сумму имени функции и передавая необходимые аргументы в вызове функции.

Пример: вызов функции путем передачи объекта в качестве этого значения в методе call()

Мы можем передать объект в метод call() в JavaScript, который позволяет нам использовать и изменять атрибуты данных переданного объекта изнутри функции. Доступ к объекту можно получить из тела функции с помощью ключевого слова this, как показано в приведенном ниже фрагменте кода.

Вывод

В приведенном выше фрагменте кода мы определили функцию sayHello(), которая может получить доступ к значениям объекта student. В вызове функции мы передали объект ученика в качестве параметра this в методе call().

Пример: связывание конструктора с помощью метода call()

В JavaScript метод call() может использоваться для вызова конструктора объекта из другой функции. Таким образом, метод вызова устанавливает начальное состояние объекта. Взгляните на приведенный ниже пример, где мы устанавливаем свойство name и age объекта, используя методы вызова внутри функций Dog и Cat.

Вывод

Здесь мы вызываем функцию, используя метод call() из другой функции. Когда мы вызываем функции Dog и Cat, функция Animal вызывается из этих двух функций.

Узнайте о call() в JavaScript

Теперь, когда мы знаем, как вызывать функцию в JavaScript, вы можете больше узнать о методе call() в JavaScript здесь.

Заключение

  • Функции — это блоки кода, которые выполняют предопределенную операцию над переданными аргументами и возвращают значение.
  • JavaScript предоставляет метод call() для создания вызовов функций.
  • Методы вызова принимают два параметра, т. е. этот аргумент и аргументы функции (необязательные).
  • Функции в JavaScript могут быть вызваны без использования метода call() и напрямую с использованием имени функции.
  • В JavaScript все функции являются объектными методами, и если какая-либо функция не написана как метод объекта JavaScript, она рассматривается как метод глобального объекта.

Как вызвать функцию в JavaScript?

Функции — один из основных строительных блоков для разработки JavaScript.

В этой статье мы рассмотрим:

  • Как вызвать функцию в JavaScript
  • Как вызвать функцию из HTML
  • Как вызвать функцию с помощью обработчика события onclick
  • Как создать функцию с автоматическим вызовом
  • Как вызвать стрелочную функцию

Есть что рассказать!

Это учебник для начинающих. Если у вас есть базовые знания JavaScript и HTML, вы сможете следовать им.

Берите кофе, вперед!

Как написать функцию на JavaScript?

Перед вызовом функции нам нужно ее создать. Есть много способов сделать это в JavaScript, но начнем с самого простого:

.
 функция sayHello(имя) {
  алерт('привет' + имя)
}
 

Это простая функция, которая займет name аргумент и отобразит окно предупреждения, приветствующее это имя.

Чтобы вызвать эту функцию, мы должны написать код:

 сказатьПривет('стив')
 

Это приведет к появлению всплывающего сообщения, которое будет выглядеть следующим образом:

Это все, что нужно для вызова функции в JavaScript. Готовы попробовать это на себе?

Вызов вашей первой функции JavaScript

Мы собираемся использовать сайт под названием Glitch для вызова вашей первой функции.

Этот сайт позволяет вам создать игровую площадку для запуска тестов.

Перейдите на сайт, чтобы создать новый проект, затем нажмите кнопку «Начать кодирование».

Это создаст новый проект, который выглядит следующим образом:

Чтобы начать редактирование javascript, щелкните файл script.js в меню слева.

Напишите функцию, которую мы создали ранее:

 функция sayHello(имя) {
  алерт('привет' + имя)
}
 

Как вызвать функцию в JavaScript? Используя этот код:

 сказатьПривет('стив')
 

Теперь ваш файл должен выглядеть так:

Для запуска кода нажмите кнопку показать в верхнем меню:

Откроется новое окно с веб-приложением внутри, и должно сработать предупреждение.

Поздравляем! Вы вызвали свою первую функцию.

Давайте расширим пример, чтобы показать предупреждение, когда мы нажимаем ссылку на странице.

В данный момент оповещение появляется сразу после загрузки страницы. Вместо этого мы можем показывать его, когда пользователь щелкает ссылку.

Для этого нам нужно использовать обработчик события onclick .

Измените HTML так, чтобы в нем была эта строка:

 <р>
  Внимание!

Затем удалите эту строку из JavaScript:

 сказатьПривет('стив')
 

Как только вы это сделаете, вернитесь к HTML, и вы должны увидеть страницу, подобную этой:

При нажатии кнопки «Предупреждать!» ссылка, вы увидите всплывающее предупреждение.

Одна из замечательных особенностей функций заключается в том, что вы можете передавать параметры. Мы уже делаем это в примере. Мы проходим в name параметр в функцию sayHello , например:

 функция sayHello(имя)
 

Затем функция может использовать этот параметр при выполнении кода. До сих пор мы передавали мое имя в качестве параметра:

 сказатьПривет('стив')
 

Таким образом, значение имени становится «стив».

Теперь давайте рассмотрим создание текстового поля, чтобы вы могли ввести свое собственное имя.

Вызов функции с параметрами в JavaScript

Первое, что мы собираемся добавить, это текстовое поле. Для этого нам нужно изменить HTML следующим образом:

 <р>
  
  <тип ввода = "текст" />

<а> Тревога!

Давайте разберемся. Теги p — это теги абзацев, которые используются для разделения содержимого в HTML. Поскольку у нас есть две пары тегов p , здесь мы создали две строки.

Затем в первом абзаце есть еще два тега, метка и ввод .

Метка предназначена для маркировки элементов формы, таких как добавленное нами текстовое поле.

Тег input показывает текстовое поле на экране, чтобы пользователь мог что-то ввести. Обратите внимание, что мы присвоили ему идентификатор id «tb-name». Это сделано для того, чтобы мы могли ссылаться на него с помощью JavaScript.

Второй абзац содержит наш тег ссылки. На этот раз внутри вызова sayHello() мы добавили еще немного кода:

 document.getElementById('tb-name').value
 

Здесь мы получаем ссылку на элемент на странице с идентификатором «tb-name». Когда у нас есть ссылка, мы получаем значение текстового поля.

Итак, здесь три части:

  1. Получаем ссылку на документ , это и есть сама веб-страница.
  2. Затем мы находим элемент с идентификатором «tb-name», используя getElementById('tb-name')
  3. Последний шаг — получить значение текстового поля с помощью .значение

Когда вы запустите страницу, вы можете ввести свое имя в текстовое поле, а затем нажать «Оповещать!».

Предупреждение будет выглядеть следующим образом:

Как написать функцию с автоматическим вызовом?

Самовызывающиеся функции — это причудливое название для функций, которые запускаются сразу после загрузки веб-страницы.

Возвращаясь к исходному примеру, у нас была эта функция:

 функция sayHello(имя) {
  алерт('привет' + имя)
}
 

Мы вызвали его, используя эту строку кода:

 сказатьПривет('стив')
 

Если бы мы хотели, чтобы функция запускалась сразу после загрузки страницы, мы могли бы объединить две части следующим образом:

 функция sayHello(имя) {
  алерт('привет' + имя)
}
сказать привет («Стив»)
 

В приведенном выше коде мы вызываем функцию, как только страница загружается, запустив sayHello() .

Когда вы даете функции имя, вы добавляете ее в память. Не давая функции имя и запуская функцию немедленно, мы можем уменьшить объем памяти. Улучшение производительности веб-страницы.

Давайте посмотрим на примере, что я имею в виду:

 (функция (имя) {
  алерт('привет' + имя)
}('Стив'))
 

Код немедленно выдаст предупреждение с привет, стив , как и раньше.

На этот раз мы не дали ему имя sayHello() у него нет имени, поэтому он не хранится в памяти. Вместо:

  • Создать функцию
  • Немедленно запустить функцию
  • Уничтожить функцию после использования

Иногда это бывает полезно, например, для аналитики, когда вы хотите отслеживать просмотры страниц.

Функции

и функции со стрелками

Прежде чем мы закончим эту статью, я хочу упомянуть стрелочные функции. Это новые функции, которые сейчас поддерживают основные браузеры.

Использование функции стрелки уменьшит ваш код. Давайте перепишем функцию sayHello, используя стрелочные функции.

Вот как выглядела исходная функция:

 функция sayHello(имя) {
  алерт('привет' + имя)
}
 

А это та же самая функция, написанная с использованием стрелочных функций:

 const sayHello = name => alert('hello' + name)
 

Поначалу это может показаться немного странным.