Запуск кода до и после каждого вызова метода в Meteor

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

swal({
  title: "Saving...",
  onBeforeOpen: () => swal.showLoading()
});
Meteor.call("method", {/*params*/}, (err, res) => {
 //Do something
 swal.hide();
});

Я хочу иметь возможность запускать эти 2 кода swal без записи этого кода при каждом вызове. Есть ли способ настроить Meteor.call для выполнения каких-либо действий до и после вызова метода?

1 ответ

Решение

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

const call = ({ title, name, params, callback }) => {
 swal({
  title: title,
  onBeforeOpen: () => swal.showLoading()
 });
 Meteor.call(name, params, (err, res) => {
   callback(err, res);
   swal.hide();
 });
}

Обратите внимание, что callback это не "реальный" обратный вызов, а просто помещается внутри операторов и получает аргументы от самого "реального" обратного вызова в качестве аргументов.

Используйте метод, например, так:

call({ 
  title: 'Saving...', 
  name: 'method', 
  params: {/*params*/}, 
  callback: (err, res) => {
    console.log('I am executed before hide');
  }
});

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

Другие вопросы по тегам