打破nodejs中的循环

我有以下设置代码

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

根据Array.some()的文档 ,如果callback函数返回true,它将退出循环

some()为数组中的每个元素执行一次callback函数,直到findcallback函数返回一个真值(在转换为布尔值时变为true)。 如果find这样的元素,some()会立即返回true。 否则,some()返回false

你的some - callback function不会返回true,事实上它不会返回任何东西。 即使return "PASS"值是为函数doesOptionMatch而不是function(option) ,这是callbacksome()

我将代码更改为类似下面的代码,通过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"); }) }) });