打破nodejs中的循环

时间:2016-10-04 12:53:09

标签: javascript node.js protractor

我有以下设置代码

var ele = element(by.model(xpath));
var option = ele.isDisplayed().then(function(found) {
    ele.all(by.tagName('option')).then(function(options) {
        options.some(function(option) {
            option.getText().then(function doesOptionMatch(text) {
                if (text == data.trim()) {
                    logger.debug("PASS--" + data.trim() + "--option selected");
                    return "PASS"; //not working
                }
                if (text != data.trim())
                    logger.debug("FAIL--" + data.trim() + "--option is Not selected");
            });

        });
    });
}, function(err) {
    logger.debug("FAIL--Exception caught in verifyDropdownSelectedValue--" + err);
});

我希望控件不在写入return语句的循环中,但它不起作用并继续迭代。这是当我返回真值时没有退出的循环部分

 options.some(function(option) {
     option.getText().then(function doesOptionMatch(text) {
         if (text == data.trim()) {
             logger.debug("PASS--" + data.trim() + "--option selected");
             return "PASS"; //not working
         }
         if (text != data.trim())
             logger.debug("FAIL--" + data.trim() + "--option is Not selected");
     });
 });

1 个答案:

答案 0 :(得分:1)

根据Array.some()上的documentation,如果回调函数返回true,它将退出循环

  

some()为每个元素执行一次回调函数   数组,直到找到一个回调返回truthy值的数组(a   转换为布尔值时变为true的值)。如果这样的话   找到element,some()立即返回true。否则,一些()   返回false

你的some - callback function不会返回true,实际上它不会返回任何内容。即使return "PASS"值适用于函数doesOptionMatch,也不适用于function(option),它是some()的回调

我将代码更改为类似下面的内容,迭代getText()值Array并在匹配时返回true。它按预期工作

var ele = element(by.tagName('select'));
var option = ele.isDisplayed().then(function(found) {
    ele.all(by.tagName('option')).getText().then(function(textValues) {
        textValues.some(function(textValue) {
            if (textValue == data.trim()) {
                logger.debug("PASS--" + data.trim() + "--option selected");
                return true;
            }
            if (textValue != data.trim())
                logger.debug("FAIL--" + data.trim() + "--option is Not selected");
        })
    })
});