流星不能退出方法

时间:2016-08-11 19:33:00

标签: javascript meteor

我在返回提醒时无法退出方法。例如,我在这里有两个验证" hasEventWithExternalId"和#34; isValidFacebookEvent",如果我多次尝试相同的事件,结果为" hasEventWithExternalId"变为true并返回警报,但随后方法的执行继续并创建新事件并返回成功警报。有关发生的任何想法吗?

Template.eventnew.events({
    'click #btn-event-data': function(e) {
 //Check if facebook event was already imported
      Meteor.call('hasEventWithExternalId', id, function(error, result) {
          if(result){
            return swal({
                    title: "Event already imported from Facebook",
                    text: "That facebook event was already imported to this application",
                    showConfirmButton: true,
                    type: "error"
                });
          }

      });

      //Check if it is a valid facebook event
      Meteor.call('isValidFacebookEvent', id, function(error, result) {
          if(!result){
            return swal({
                    title: "Invalid Facebook event",
                    text: "That's not a valid facebook event'",
                    showConfirmButton: true,
                    type: "error"
                });   
          }
      });

       Meteor.call('importEventFromFacebook', id, function(error, result) {
          if(error){
            console.log(error);
            return false;
          }
          else{
            return swal({
                    title: "Event sucessfully imported",
                    showConfirmButton: true,
                    type: "success"
                });   
          }
      });

    }

其中一种方法:

Meteor.methods({

  //Check if Event with external id x already exists
  hasEventWithExternalId: function(externalId){
    if(Event.find({externalId: externalId}).count()>0)
        return true;
    else
        return false;

  }
});

1 个答案:

答案 0 :(得分:1)

实际上,无论你的2次检查结果如何,你都在执行3 Meteor.call()

因此,即使您的"hasEventWithExternalId"调用返回true(即它可以找到已导入的事件,例如第二次触发按钮点击事件),您的其他调用仍将执行,特别是你试图(重新)导入FB事件的"importEventFromFacebook"调用。

如果前一个{0}没有返回错误/结果表示不继续,则应执行下一个Meteor.call(),例如在else块中。

例如:

  Meteor.call('hasEventWithExternalId', id, function(error, result) {
      if (error) return;

      if (result){
          return swal({
                title: "Event already imported from Facebook",
                text: "That facebook event was already imported to this application",
                showConfirmButton: true,
                type: "error"
            });
      } else {
          Meteor.call('isValidFacebookEvent', id, function (error, result {
              // etc.
          });
      }

  });

但首先,为什么不在一个Meteor.methods()中直接在服务器端执行所有操作,而不必执行3个不同的调用?