【发布时间】:2015-05-26 07:58:57
【问题描述】:
我有一个网络测试代码,我不想在找到该项目后迭代其余代码。 此代码迭代到所有项目并最终返回。 如何解决这个问题,因为在每个我都不打破!
isItemPresent: function (name) {
var def = Q.defer();
Trace.add("Checking the " + name + " inside the menu");
var count = 0, total = 0, stop = false;
var listObj = element(by.id(this.MENU_ID)).all(by.tagName("div"));
listObj.count().then(function (nr) {
total = nr;
listObj.each(func);
});
var _this = this;
var func = function (element) {
element.getAttribute('class').then(function (classes) {
count++;
if (classes.indexOf(name) !== -1 && !stop) {
stop = true;
element.getAttribute('id').then(function (value) {
_this._isItemVisible('', value).then(function (opt) {
value = value.match(/(\d+)/g);
if (opt.success) {
// console.log('------- BREAK --------');
def.resolve({success: true, msg: {index: value[0]}});
Trace.add("Menu item: " + name + " was found in the main menu.");
} else {
def.resolve({success: false, msg: {index: value[0]}});
Trace.add("Menu item: " + name + " was not found in the main menu.");
}
});
});
} else if (count === total && stop === true) {
def.resolve({success: false, msg: {index: 0}});
Trace.add("Menu item: " + name + " was not found in the main menu.");
stop = true;
}
});
};
return def.promise;
};
【问题讨论】:
-
你究竟是在哪里试图停止循环?而且,
listObj.each()来自哪个库?有没有办法停止循环?你可以通过抛出一个异常来打破基于承诺的东西,承诺库将捕获并变成你可以在更高级别处理的承诺拒绝。 -
listObj 包含例如很多菜单项(1000 个),当我在第十八个中找到该项目时,然后 BREAK...
-
我在问你
listObj是什么类型的对象以及它如何具有.each()方法,因为这不是标准的Javascript。而且,我在问你究竟在代码中的哪个位置尝试停止循环,因为这会影响你的执行方式?如果不了解这些答案,我们将无法回答您的问题。另外,请尽量及时回复,否则人们会失去帮助的兴趣。如果您在不到几个小时内回答问题而不是等待几乎一整天,StackOverflow 的效果会好得多。
标签: javascript angularjs promise each web-testing