无法从Javascript函数中更新变量

无法从Javascript函数中更新变量,javascript,protractor,Javascript,Protractor,我正在尝试从rows.each()中更新rowNumber变量,但是当我在console.log之后更新它时,它仍然设置为null。我做错了什么?我甚至尝试过将var rowNumber定义为“更高”,同样的结果 var licenceNumber = 233521673; it('should open created Driver Licence', function() { var rowNumber = null; var rows = element.all(by.

我正在尝试从rows.each()中更新rowNumber变量,但是当我在console.log之后更新它时,它仍然设置为null。我做错了什么?我甚至尝试过将var rowNumber定义为“更高”,同样的结果

var licenceNumber = 233521673;

it('should open created Driver Licence', function() {
    var rowNumber = null;

    var rows = element.all(by.repeater('(rowRenderIndex, row) in rowContainer.renderedRows track by $index'));

    rows.each(function(element, index) {
        element.getText().then(function (text) {
            if (text.includes(licenceNumber)) {
                rowNumber = index;
                return true;
            }
        });
    });
    console.log('rowNumber = ', rowNumber);
});
用于等待所有承诺得到解决:

var licenceNumber = 233521673;

it('should open created Driver Licence', function() {
    var rowNumber = null;

    var rows = element.all(by.repeater('(rowRenderIndex, row) in rowContainer.renderedRows track by $index'));

    var promises = [];

    rows.each(function(element, index) {
        var promise = element.getText().then(function (text) {
            if (text.includes(licenceNumber)) {
                rowNumber = index;
            }
        });
        promises.push(promise);
    });

    return Promise.all(promises).then(function () {
        console.log('rowNumber = ', rowNumber);
    });
});

请注意,链接到promise.all的承诺也会返回给摩卡。这一点很重要,因为它告诉Mocha该测试是异步的,并且在返回的承诺解决或拒绝之前,不会被认为是完整的。阅读更多信息。

看来getText()返回一个承诺,因此“then”回调将是异步的。因此,您的console.log完全有可能在执行之前运行,因此该值尚未更新。正确的,console.log在getText()之前执行@laziotibjczyk您还有什么需要澄清的吗?或者您现在了解问题了吗?@laziotibjczyk很高兴得到确认。因此,如果您想查看值,可以将console.log移动到“then”函数中。我的想法是让console.log在rows.each()之后执行。我现在明白这个问题了。我添加了一个新的it()测试,不管怎样,它都是按顺序执行的。谢谢你的帮助。