Как вырваться из петли JavaScript - PullRequest
0 голосов
/ 25 апреля 2020

это моя функция, и я хочу разорвать туалет при выполнении условия, но я получаю сообщение об ошибке:

SyntaxError: недопустимый оператор разрыва

Я использую транспортир с javascript.

async CompareTableData(byElement, param) {
  try {
    await this.WaitToBeClickable(element(By.cssContainingText(byElement.value, param)));
    await element.all(byElement).then(async function(item) {
      for (var i = 0; i < item.length; i++) {
        item[i].getText().then(async function(text) {
          var trimTxt = text.trim();
          if (await trimTxt == param && byElement.using == "css selector") {
            console.log(`Param FOUND! ${param}\n`);
            await expect(element(By.cssContainingText(byElement.value, param)).isPresent()).toBe(true);
            break;
          } else {
            return;
          }
        });
      }
    });
  } catch (err) {
    console.log("Table comparison FAILED, element not present!");
    return console.log(err);
  }
};

1 Ответ

0 голосов
/ 25 апреля 2020

Поскольку у других есть указатель, ваш разрыв не в вашем l oop, а в анонимной функции в вашем .then. Кроме того, главная проблема заключается в том, что вы плохо выполняете свои обещания. Async/await был введен, чтобы упростить обработку обещаний, не требуя от вас использования .then операторов, поэтому вам определенно не следует использовать их вместе таким образом.

Также expect операторы являются синхронными, поэтому не требуют ожидание, но действия внутри ожидаемого будут (почти всегда) асинхронными c при использовании Protractor, так что оператор должен читать expect(await element(By.cssContainingText(byElement.value, param)).isPresent()).toBe(true);

Вы можете переписать свой код следующим образом:

async function CompareTableData(byElement, param) {
    try {
        await this.WaitToBeClickable(element(By.cssContainingText(byElement.value, param)));
        const item = await element.all(byElement)

        for (var i = 0; i < item.length; i++) {
            const text = await item[i].getText();
            var trimTxt = text.trim();
            if (trimTxt == param && byElement.using == "css selector") {
                console.log(`Param FOUND! ${param}\n`);
                expect(await element(By.cssContainingText(byElement.value, param)).isPresent()).toBe(true);
                break;
            } else {
                return;
            }
        }
    } catch (err) {
        console.log("Table comparison FAILED, element not present!");
        return console.log(err);
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...