首页 > 解决方案 > 无法从函数 Javascript 中更新变量

问题描述

我正在尝试从 rows.each() 中更新 rowNumber 变量,但是当我之后 console.log 它时,它仍然设置为 null。我究竟做错了什么?我什至尝试定义 var rowNumber 'higher',结果相同。

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);
});

标签: javascriptprotractor

解决方案


使用Promise.all等到所有的 Promise 都解决了:

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。这很重要,因为它告诉 Mocha 这个测试是异步的,并且在返回的承诺解决或拒绝之前不会被认为是完整的。在此处阅读有关此内容的更多信息。


推荐阅读