我正在尝试获取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;
}
答案 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