一个函数不等待另一个函数执行

时间:2018-11-05 10:09:14

标签: angularjs

这是我的服务

var validateEmailService=function (validateEmailUrl,validateEmailParameters,email) {
    var url=validateEmailUrl +'?';
    angular.forEach(validateEmailParameters,function (value,key) {
        url=url +key +'='+ value.parameter +'&';
    });
    url=url+'email='+email;
    $http.get(url).then(function (value) {
        var result = value;
        var smtpCheck = result.data.smtp_check;
        var mxRecordsCheck = result.data.mx_found;
       // console.log(smtpCheck ,mxRecordsCheck);
        if (smtpCheck === true && mxRecordsCheck === true){
            //console.log('In');
            return true;
        }
        //console.log('Out');
    });
};

var sendEmailService=function (sendEmailApiUrl,emailData,config,email,firstName,lastName) {
    emailData = JSON.stringify(emailData);
    emailData = emailData.replace("%%Email%%", email);
    emailData = emailData.replace("%%FirstName%%", firstName);
    emailData = emailData.replace("%%LastName%%", lastName);
    emailData = JSON.parse(emailData);
    $http.post(sendEmailApiUrl, emailData, config);
};

return {
    validateEmailService: validateEmailService,
    sendEmailService: sendEmailService
};

我已经在控制器中调用了这些功能

var validate = emailService.validateEmailService(validateEmailUrl, validateEmailParameters,$scope.patient.Email);
if (validate === true) {
    emailService.sendEmailService(sendEmailApiUrl, emailData, config,$scope.patient.Email,$scope.patient.givenName,$scope.patient.familyName);
    messagingService.showMessage("info", "REGISTRATION_LABEL_SAVED");
    $state.go("patient.edit", {
        patientUuid: $scope.patient.uuid
    });
}
else {
    alert('Email does not exist');
}

因此,如果执行if语句,validate不包含任何内容,即使validate应该为true,它也会自动转到else部分。

1 个答案:

答案 0 :(得分:1)

您应该改用诺言,$http.get是异步的

var validateEmailService=function (validateEmailUrl,validateEmailParameters,email) {
    var url=validateEmailUrl +'?';
    angular.forEach(validateEmailParameters,function (value,key) {
        url=url +key +'='+ value.parameter +'&';
    });
    url=url+'email='+email;

    // IMPORTANT PART: USE RETURN
    return $http.get(url).then(function (value) {
        var result = value;
        var smtpCheck = result.data.smtp_check;
        var mxRecordsCheck = result.data.mx_found;
       // console.log(smtpCheck ,mxRecordsCheck);
        if (smtpCheck === true && mxRecordsCheck === true){
            //console.log('In');
            return true;
        }
        //console.log('Out');
    });
};

然后在您的控制器中:

emailService.validateEmailService(validateEmailUrl, validateEmailParameters,$scope.patient.Email).then(function(validate){
    if (validate === true) {
        emailService.sendEmailService(sendEmailApiUrl, emailData, config,$scope.patient.Email,$scope.patient.givenName,$scope.patient.familyName);
        messagingService.showMessage("info", "REGISTRATION_LABEL_SAVED");
        $state.go("patient.edit", {
            patientUuid: $scope.patient.uuid
        });
    } else {
        alert('Email does not exist');
    }
})

另外,请参阅此link有关承诺的信息