在Meteor中的每个Method调用之前和之后运行代码

时间:2019-01-09 15:52:41

标签: javascript meteor client-side meteor-methods

我正在运行几个方法调用,这些方法需要向最终用户显示加载模式,并在方法返回结果时将其隐藏。我一直在寻找一种无需重复代码即可为每种方法运行此调用前代码和调用后代码的方法。

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

我希望能够运行这2个swal代码,而不必在每个调用中都编写该代码。 有什么方法可以配置Meteor.call在调用该方法之前和之后执行某些操作?

1 个答案:

答案 0 :(得分: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将其提供给其他文件/模块使用。