嘿我在Meteor应用程序上管理我的错误有问题,我搜索了这类事情,我发现了一些关于同步功能的话题,但我可以管理我的问题。在我的客户端,我调用一个方法,我需要先得到结果才能完成。 我的客户方:
onSubmit: function(doc){ // Gestion du formulaire d'inscription
var error = null;
var title = doc.title;
var content = doc.content;
var formData = {
title: title,
content: content
};
//get the captcha data
var captchaData = grecaptcha.getResponse();
Meteor.call('createCPDM', formData, captchaData, function(err){
if(err){
error = new Error("Une erreur s'est produite");
}
});
if(error === null){
this.done(); // Appelle onSuccess
}
else{
this.done(error); // Appelle onError
}
// reset the captcha
grecaptcha.reset();
return false;
},
我的服务器端:
createCPDM: function(formData, captchaData) {
var ip = "0.0.0.0";
var verifyCaptchaResponse;
if (!this.connection.clientAddress) {
verifyCaptchaResponse = reCAPTCHA.verifyCaptcha(ip, captchaData);
}
else {
verifyCaptchaResponse = reCAPTCHA.verifyCaptcha(this.connection.clientAddress, captchaData);
}
if (!verifyCaptchaResponse.success) {
throw new Meteor.Error('422', 'reCAPTCHA Failed: ' + verifyCaptchaResponse.error);
}
else {
var CPDMID = CPDM.insert(formData);
}
return true;
}
所以我需要知道在继续之前我是否有错误...
感谢您的帮助!!!
答案 0 :(得分:1)
<强> ES6 强>
onSubmit: function(doc){ // Gestion du formulaire d'inscription
// preventDefault() ????
var formData = {
title: doc.title,
content: doc.content
};
//get the captcha data
var captchaData = grecaptcha.getResponse();
Meteor.call('createCPDM', formData, captchaData, err => {
if(err) {
// Appelle onError
return this.done(new Error("Une erreur s'est produite"));
}
this.done(); // Appelle onSuccess
grecaptcha.reset();
});
}
<强> ES5 强>
onSubmit: function(doc){ // Gestion du formulaire d'inscription
// preventDefault() ????
var formData = {
title: doc.title,
content: doc.content
};
//get the captcha data
var captchaData = grecaptcha.getResponse();
var self = this
Meteor.call('createCPDM', formData, captchaData, function(err) {
if(err) {
// Appelle onError
return self.done(new Error("Une erreur s'est produite"));
}
self.done(); // Appelle onSuccess
grecaptcha.reset();
});
}
答案 1 :(得分:0)
Meteor.call
永远不会同步返回服务器端返回值。
如果要在Meteor中使用服务器端计算的结果,唯一的方法是在回调函数中。引用documentation:
如果你包含一个回调函数作为最后一个参数[...] 该方法将异步运行:它将不返回任何内容 特别是不会抛出异常。当方法是 完成[...]将使用两个参数调用回调:error 和结果。
您可以显示面向用户的通知(如旋转轮),直到回调获得服务器端结果。