首页 > 解决方案 > 异步/等待电子邮件验证

问题描述

我正在尝试编写一个函数来检查使用 Async/Await 输入表单输入的电子邮件。它看起来像这样:

//Check email entered
if($('email')){
    $('email').observe('blur', function() {

        //Validate email
        (async () => {
            await resetMessages('email');
            checkEmptyField('email');
            checkEmailExists(); //Checks if email already exists.
            checkEmailDomain(); //Checks for a valid domain.
        })()

    });
}

我对 Async/Await 完全陌生,坦率地说,我不知道自己在做什么,仍然试图绕开它。

显然,我想检查每个函数,如果前一个测试通过,则只传递给下一个函数。相反,例如,如果该字段为空,则向用户发送消息并且不要移动到下一个函数。

这是 checkEmailExists() 函数的示例:

function checkEmailExists() {

    const email = $F('email');

    if(email!=''){
        const url = '/global/validate/?action=check-email-exists&e=' + email;
        let result;

        fetch(url)
        .then(async function(data){
            result = await data.text();
            if(result == 'OK'){
                setMessage('message', defaultMessage, 'classInfo');
                $('email').addClassName('ok-field');
            }
            if(result == 'EXISTS'){
                setMessage('message', 'Email address is already registered., 'classBad');
                $('email').addClassName('bad-field');
            }
            if(result == 'INVALID'){
                setMessage('message', 'Email address is invalid.', 'classBad');
                $('email').addClassName('bad-field');
            }
        })
        .catch(function(error) {
            console.log(error);
        });
    }
}

问题是我不知道该怎么做,有人可以帮我正确编码。

干杯。

标签: validationasync-awaitfetch

解决方案


你检查 email 函数应该返回一个承诺,它是 awiatable。

所以,返回 fetch 调用。


推荐阅读