我在返回提醒时无法退出方法。例如,我在这里有两个验证" 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;
}
});
答案 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个不同的调用?