javascript延迟和循环

时间:2017-11-08 04:00:40

标签: javascript jquery web-services

前提:我正在尝试使用延迟来处理对Web服务的调用,完成后,处理数据,然后移动到下一个Web调用调用集。这是CMS,它的小部件,一些javascript / jquery和一些内部服务的Web调用之间的一个非常复杂的途径。

实际发生了什么:大部分时间它正在准确地返回预期的,完美的输出......大部分时间。有时似乎.done在继续之前没有正确地保持正确,并且第二个小部件的一些结果最终会出现在第一个小部件数据中。因此,我希望.done部分可能不是我需要的。

URLArray正常工作并正确链接所有内容,但由于某种原因,myJSONData并不总是包含正确的数据。 (可能包含EXTRA,来自后续的小部件),因此我建议.done不能完全按照我的预期进行操作。

有人可以帮助解决可能出错的问题。我的意思是我可以看到终点线,它的工作......大部分时间......只有这一个问题需要解决。

一般代码:

ulContactID.each(function (d) {  
    var URLArray = [];  
    var departmentList = [];  
    // *****************  
    // Get department  
    // *****************  
    var dept;  
    if (d == 0) {  
        dept = $(".departmentClass");  
    } else {  
        dept = $(".departmentClass" + d);  
    }  
    var department = dept.text();  
    // *************************  
    // Set Department Call  
    // *************************  
    if (department != "none" && department !="") {  
        URLArray.push('http://10.171.1.202:5185/api/employees/GetByDepartment?department=' + department);  
    }  
    // *****************  
    //Get Employee List  
    // *****************  
    var employees;  
    if (d == 0) {  
        employees = $(".employeeClass");  
    } else {  
        employees = $(".employeeClass" + d );  
    }  
    var employeeList;  
    employeeList = employees.text().split(",");  
    // ******************  
    //  Set Employee Calls.  
    // ******************  
    employeeList.forEach(function (d){  
        URLArray.push('http://10.171.1.202:5185/api/employees/GetByUserPrincipalName?userPrincipalName=' + d);   
    });  

Ajax Calls to Web service
        $.when.apply($, Do_AjaxCalls(URLArray)).done(function () {  
            URLArray = [];  
            console.log(myJSONData);  
            // This is where the return myJSONData usually works, but not always.
            // and then resets the array before doing another round in the loop if             //needed.  
            });  
            myJSONData = [];  
        });  
    });

AJAX使用延迟调用:

// *************************  
// Do Ajax Calls  
// *************************  
function Do_AjaxCalls(URLArray) {  
    var requests = [];  
    var arrayCount = URLArray.length;  
    for (i = 0; i < arrayCount; i++) {  
        var currURL = URLArray[i];  
        requests.push(
            $.ajax({  
            type: 'Get',  
            url: currURL,  
            dataType: 'jsonp',  
            fail: console.log("Issue on: " + currURL),  
            success: function (result) {  
                if ($.isArray(result)) {  
                    result.forEach(function (d) {  
                        myJSONData.push(d);  
                    });  
                } else {  
                    myJSONData.push(result);  
                }  
            }  
        }))  
    }  
    return requests;  
} 

编辑:次要文字更新。

0 个答案:

没有答案