执行订单

时间:2016-07-12 20:10:53

标签: javascript visual-studio typescript angular

我正在尝试获取WebApi的值来验证我的输入,但执行的顺序与编码的顺序不同。

我认为这是因为get是异步的,但我不知道如何解决它。

你能帮助我吗?

以下示例(图片) - >

代码:

if (ano.length == 4 && ano > 1900 && ano < 2100) {
    // Verificando o intervalo permitido para os valores dos meses e dias
    if (dia > 0 && dia <= 31 && mes > 0 && mes <= 12) {
        // Verifica os meses que posuem dia 30 dias  
        if ((mes == 4 || mes == 6 || mes == 9 || mes == 11) && dia > 30) {

            return { 'dataValidation': 'data is invalid.' };
        }
        // caso seja mês 2 verifica se o ano é bissexto
        if (mes == 2) {
            //se for bissexto
            if (ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0)) {
                // Se for bissexto pode o dia ser no máximo 29   
                if (dia > 29)
                    return { 'dataValidation': 'data is invalid.' };
                // se não for bisexto o dia pode ser no máximo 28                  
            } else if (dia > 28) {

                return { 'dataValidation': 'data is invalid.' };
            }
        }
    } else {

        return { 'dataValidation': 'data is invalid.' };
    }

    // 3°
    this.filiadoService.validarIdadeFiliacao(c.value).subscribe(
        data => {
            this.dataNascimentoModel = data;
        });

    //2°
    if (!this.dataNascimentoModel.IsValido) {
        return { 'dataValidation': 'data is invalid.' };
    } else {
        return null;
    }

2 个答案:

答案 0 :(得分:0)

是的,就像你说的那样,因为http调用的异步特性。不过,这很容易解决!只需将http调用之后的逻辑移到subscribe回调中即可。

但是现在你无法再从订阅回调中返回任何内容,这就是为什么你需要指定自己的回调作为方法参数,你传递对象而不是返回它(例如{{ 1}})

callback({ 'dataValidation': 'data is invalid.' })

你可以这样调用这个方法:

methodName(..., callback: (validationObject) => void) : void {
    if (ano.length == 4 && ano > 1900 && ano < 2100) {
        // Verificando o intervalo permitido para os valores dos meses e dias
        if (dia > 0 && dia <= 31 && mes > 0 && mes <= 12) {
            // Verifica os meses que posuem dia 30 dias  
            if ((mes == 4 || mes == 6 || mes == 9 || mes == 11) && dia > 30) {

                callback({ 'dataValidation': 'data is invalid.' });
                return;
            }
            // caso seja mês 2 verifica se o ano é bissexto
            if (mes == 2) {
                //se for bissexto
                if (ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0)) {
                    // Se for bissexto pode o dia ser no máximo 29   
                    if (dia > 29)
                        callback({ 'dataValidation': 'data is invalid.' });
                        return;
                    // se não for bisexto o dia pode ser no máximo 28                  
                } else if (dia > 28) {

                    callback({ 'dataValidation': 'data is invalid.' });
                    return;
                }
            }
        } else {
            callback({ 'dataValidation': 'data is invalid.' });
            return;
        }

        // 3°
        this.filiadoService.validarIdadeFiliacao(c.value).subscribe(
            data => {
                this.dataNascimentoModel = data;

                if (!this.dataNascimentoModel.IsValido) {
                    callback({ 'dataValidation': 'data is invalid.' });
                } else {
                    callback(null);
                }
            }
        );
    }
}

答案 1 :(得分:0)

谢谢你的回复!我解决了导入NG_ASYNC_VALIDATORS并使用Promise。

--test=POMAuctivaTest.TestSuite.ExistingUserTestSuite(\"firefox\").MakePaymentToAccountViaPayPal