I need some help with a nested for loop in protractor and converting/understanding promises correctly. In ‘test’ below the functionality works with all values, but as soon as I try to put in the nested for loops things go south. Any chance someone has a clean suggestion on this? I have tried the forEach which some indicate handle the promise issue inherently, but I seem to get the same results.
My Test data looks like:
objectPage.chartValues = {
[['chart','ChartID01'],['title','TitleText01'],['Name01','value01'],['Name02','Value02']],
[[‘chart','ChartID02'],['title','TitleText02'],['Name01','value01'],['Name02','Value02']],
[[‘chart','ChartID03'],['title','TitleText03'],['Name01','value01'], [‘Name02’,'Value02'],['Name03','Value03']]
}
it ('test', function (){
    for (chartNumber = 0; chartNumber < objectPage.chartValues.length; chartNumber++) {
        for (chartEntry = 1; chartEntry < ObjectPage.chartValues[chartNumber].length; chartEntry++) {
    //for readability of next call pulled out here
            chart = objectPage.chartValues[chartNumber][0][1];
            name = objectPage.chartValues[chartNumber][chartEntry][0];
            value = objectPage.chartValues[chartNumber][chartEntry][1];
            pageObject.getbackgroundcolor(chart, name).then(function (color) {
                expect(pageObject.getElementFromTable(chart, name, color).getText())
                    .toEqual(value);
            });
        }
    }
});
//function calls in pageobject  the call for get background is straight forward.
   this.getbackgroundcolor = function (chartName, valueName) {
             return element(by.id(chartName)).element(by.cssContainingText('.dxc-item', valueName)).element(by.tagName('rect')).getAttribute('fill');
//get element is very similar.
    this.getElementFromTable = function(chartName, valueName, colorname) {
    some searching stuff.. 
    return element(by.css(‘tspan'));
My results seem to indicate the look executes, but not returning from the actual expect. Finally trying to find a value for an item with background color of null. I know this is not true as I have run all values individually and in sequence without issue. Hopefully I avoided cut and past/generalization errors.
Thank you.
Update: it('Verify Charts on page ', function () {
   myChartlength = objectPage.chartValues.length;
    for (chartNumber = 0; chartNumber < myChartlength; chartNumber++) {
        (function (chartNumber) {
            myEntrylength = objectPage.chartValues[chartNumber].length;           
            chartValues = objectPage.chartValues[chartNumber];
            for (chartEntry = 2; chartEntry < myEntrylength; chartEntry++) {
                (function (chartEntry) {
                    //pulled these out for readablility of next call.
                    chart = chartValues[0][1];
                    name = chartValues[chartEntry][0];
                    value = chartValues[chartEntry][1];
                    console.log('chart: ' + chart + ', name: ' + name + ', value: ' + value);
                  page.getbackgroundcolor(chart, name).then(function (color) {
                        expect(objectPage.getElementFromTable(chart, name, color).getText()).toEqual(value);
                    });
                })(chartEntry);
            };
        })(chartNumber);
    };
});
 
     
    