Meteor上有错误的同步问题

Synchronisation issue with error on Meteor

本文关键字:同步 问题 有错误 Meteor      更新时间:2024-05-17

嘿,我在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;
}

所以在继续之前,我需要知道我是否有错误。。。

感谢您的帮助!!!

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();
    });
}

Meteor.call从不同步返回服务器端返回值。

如果您想在Meteor中使用服务器端计算的结果,唯一的方法是使用回调函数。引用文件:

如果在最后一个参数中包含回调函数[…]该方法将异步运行:在特别的,不会抛出异常。当方法为complete[…]将使用两个参数调用回调:error以及结果。

您可能会显示一个面向用户的通知(就像一个旋转的轮子),直到回调得到服务器端的结果。