Angular js的验证函数在api调用验证完成之前返回

Angular js validation function returns before the api call for validation is completed

本文关键字:验证 调用 返回 api js 函数 Angular      更新时间:2023-09-26
                if (!validate()) {
                    return;
                };

            function validate() {
                var nameIsValid = false;
                var validationStatus = true;
                dataApi.GetNameValid(viewModel.Name).then(function (data) {
                    nameIsValid = data.isValid;
                    validationStatus = checkValidInput(nameIsValid);
                });
                return validationStatus;
            }
            function checkValidInput(isValid)
            {
                if(!isValid){
                    return false;
                }
            //chk other input field validations
            }

问题是validate()总是返回true。如果我改变validationStatus = false,那么它总是返回false。GetNameValid是异步false,仍然返回validationStatus在GetNameValid()完成执行之前被调用,因此checkValidInput永远不会被调用,实际的验证永远不会发生。对于这种需要在函数返回之前等待ajax调用的场景,是否还有其他方法?任何指向正确方向的文章或博客都会有所帮助。由于

我认为你能做的是将另一个then链接到你已经拥有的那个then上,这样就可以达到你想要的效果了。虽然这是未经测试的,但我认为它应该工作。

if (!validate()) {
    return;
}

function validate() {
    var nameIsValid = false;
    var validationStatus = true;
    dataApi.GetNameValid(viewModel.Name)
    .then(function (data) {
        nameIsValid = data.isValid;
        validationStatus = checkValidInput(nameIsValid);
    }).then(function(validationStatus){
        return validationStatus;
    });
}
function checkValidInput(isValid) {
    if(!isValid) {
        return false;
    }
}