Promise,.then()变量一直说未定义

时间:2016-07-19 22:54:36

标签: javascript promise protractor

我遇到了变量范围问题。下面的代码是Protractor,它是Jasmine和JavaScript的混合体。我遇到的问题是我正在尝试使用householdLabelText中的字符串值并将其与householdArray[i]的值进行比较。

但是,每当我这样做时,householdArray[i]都会以未定义的形式返回。我猜这是因为householdArray超出范围或某事。我不是一个专家,Promise / callback是如何工作的,所以我可能错了。如果有人能给我一些关于如何保持householdArray范围的提示,我将不胜感激。

it((testNumber += 1) + '---' + suiteName + '---' +
'It should dispaly the appropraite text for the rating factors.',
    function() {

        var householdArray = ['ACCIDENTS', 'VIOLATIONS', 'DRIVERS', 'VEHICLES', 'TENURE'];

        element.all(by.repeater('item in vm.policyDetails.householdDetails')).then(function(householdDetails) {

            for(var i = 0; i < householdDetails.length; i++)
            {
                householdDetails[i].element(by.binding('item.label')).getText().then(function(householdLabelText) {
                console.log(householdArray[i]);
                expect(householdLabelText).toEqual(householdArray[i]); // householdArray[i] is undefined
                });
            }
        });
    });

1 个答案:

答案 0 :(得分:0)

householdArray的范围很好,因为它已在测试功能块中声明,并且您在嵌套函数中使用它,因此它应该绝对在范围内。

更可能的原因是i的值导致它超出数组边界读取,因为householdDetails.length可能与householdArray.length不同。这是我在这个例子中要检查的第一件事。