【问题标题】:"Illegal break statement" is appearing. Can anyone suggest the reason to solve it出现“非法中断声明”。任何人都可以提出解决它的原因
【发布时间】:2017-06-23 08:09:39
【问题描述】:

出现“非法中断语句”。任何人都可以提出解决它的原因

this.selectOrganization = function() {

        organizationLocator.each(function(element) {

            FunctionLibrary.getText(element, organizationName).then(function(text) {
                logger.info(text);
                if (text.includes('ImageResizingOrg')) {

                    FunctionLibrary.click(element, organizationName);

                    break;

                }
            })

        })
    };

【问题讨论】:

  • breaks 应该在循环内(forwhiledo-while
  • 你试过return false吗?从技术上讲,循环代码在each 函数下运行,您显示的代码是一个承诺/回调。
  • 你看过使用 Array.every 吗?
  • @ibrahimmahrir 我只是忘记了它只能被循环喜欢。我的坏

标签: javascript angularjs automation jasmine protractor


【解决方案1】:
organizationLocator.each(function(element) {

            FunctionLibrary.getText(element, organizationName).then(function(text) {
                logger.info(text);
                if (text.includes('ImageResizingOrg') && temp == true) {

                    FunctionLibrary.click(element, organizationName);

                    temp = false;



                }
            })

        })

【讨论】:

    【解决方案2】:

    您无法中断 each 方法 - 它模拟原生 forEach 方法的行为,而原生 forEach 除了抛出异常之外不提供中断循环。

    mozilla doc的报价:

    除了抛出异常之外,没有其他方法可以停止或中断 forEach() 循环。如果你需要这样的行为,forEach() 方法是错误的工具。

    可以通过以下方式提前终止:

    • 一个简单的循环

    • for...of 循环

    • Array.prototype.every()

    • Array.prototype.some()

    • Array.prototype.find()

    • Array.prototype.findIndex()

    其他 Array 方法:every()、some()、find() 和 findIndex() 使用谓词 返回真值以确定是否需要进一步迭代来测试数组元素。

    但是有一个解决方案是Array.every 方法,它使用它的回调的返回值来迭代下一个元素。

    every 对数组中存在的每个元素执行一次提供的callback 函数,直到找到callback 返回错误值的元素。如果找到这样的元素,every 方法会立即返回 false。

    Array.every 方法示例:

    var orgs = ['NSO', 'CRY India', 'WHO', 'ImageResizingOrg', 'Unicef'];
    var returnval = true;
    orgs.every(function (text) {
        if (text.includes('ImageResizingOrg')) {
            //you can do anything here like firing click event as you have done in your code
            returnval = false;
        }
        console.log(text);
        return returnval;
    });

    【讨论】:

      【解决方案3】:

      使用Promise.all 组合for each 循环的每次迭代,并在您希望跳出循环时拒绝promise。

      var promises = [];
      
      organizationLocator.each(function(element) {
          promises.push(FunctionLibrary.getText(element, organizationName).then(function(text) {
              logger.info(text);
              if (text.includes('ImageResizingOrg')) {
                  FunctionLibrary.click(element, organizationName);
                  return Promise.reject(false);
              }
          }));
      });
      
      return Promise.all(promises);
      

      【讨论】:

      • 你能看看这个
      猜你喜欢
      • 1970-01-01
      • 2013-12-01
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 2020-10-27
      相关资源
      最近更新 更多