javascript 中 for 循环内的函数检索第二个值而不是第一个值

function inside a for loop in javascript retrieves 2nd value rather than the first value

我得到了一个 json 对象数组,其中包含 "USERS" 的列表。我尝试使用 for 循环遍历数组,然后调用另一个函数是否 user

//Check for User if already existed or not
queryUserEmail = function(User){
    return emailQueryElement.sendKeys(User,protractor.Key.ENTER).then(function(){
        return usersListElement.all(by.css('.shortHand')).getText().then(function(text){
            if(text.toString().indexOf(User)!=-1){
                return true;
            }else{
                return false
            };
        });
    });
};  

this.createUser = function(userArray){
 for(var userI=0;userI<userArray.length;++userI){
        var UserEmail = userArray[userI].UserEmail;
        logger.info('UserEmail outside function::'+UserEmail);
        queryUserEmail(UserEmail).then(function(checkFlag){
            logger.info('UserEmail inside funtion::'+UserEmail);
        });
    };
};

并且 User 数组包含两个用户,当我尝试 运行 函数时,第一次迭代在函数 UserEmail 之外具有数组第一个用户电子邮件,但在函数内部 userEmail 具有第二个用户的电子邮件。

我是不是遗漏了什么?

听起来像是一个 asynchronous/closure 问题。如果是这样,将 queryUserEmail 函数包装在函数闭包 (IIFE) 中:

for ( var userI = 0; userI < userArray.length; ++userI ) {
    var UserEmail = userArray[userI].UserEmail;
    logger.info('UserEmail outside function::' + UserEmail);
    (function (uEmail) {
        queryUserEmail(uEmail).then(function(checkFlag){
            logger.info('UserEmail inside funtion::' + uEmail);
        });
    }(UserEmail))
};

thenqueryUserEmail 的 属性)触发时,for 循环已经完成并且 UserEmail 是最后分配的用户。