我正在为循环寻找简单的解决方案,我必须确认每个元素。我看着暂停和恢复,但这很麻烦。有没有其他方法可以让它变得简单?我确信这个问题并不是那么罕见,很多人都坚持这个问题。
我想要实现的是 - 我在列表中循环,如果我没有通过其EAN代码找到项目,那么它会打开搜索功能以找到这个并在找到该项目之后(或not)用户点击Next
并继续循环,直到出现相同情况。
我现在有些代码:
for(var f = 0; f < biLen; f++){
var ean_parsed = parsedList[i][1];
if(beerList[f].get("ean") === ean_parsed){
console.log("Beer found: " + beerList[f].get("beer_name"));
break;
} else {
if(f === biLen - 1){
//open modal, search for item and then continue looping
console.log("B'r not found: " + parsedList[i][0]);
}
}
}
编辑(整个功能代码而不是它的一部分):
function parserCompareList(){
var parsedList = parseResult;
var piLen = parsedList.length;
var beerList = listaPiwArr;
var biLen = beerList.length;
var new_offer = [];
var counter = document.getElementById('imHeader');
for(var i = 0; i < piLen; i++){
counter.innerHTML = i + "/" + piLen; //plain text that's keeping where we actually are with this
for(var f = 0; f < biLen; f++){
var ean_parsed = parsedList[i][1];
if(beerList[f].get("ean") === ean_parsed){
console.log("Beer found: " + beerList[f].get("beer_name"));
break;
} else {
if(f === biLen - 1){
console.log("B'r not found: " + parsedList[i][0]);
}
}
}
}
}
var indexCache;
function loop() {
var index = indexCache || 0;
for (var f = index; f < biLen; f++) {
var ean_parsed = parsedList[i][1];
if (beerList[f].get("ean") === ean_parsed) {
console.log("Beer found: " + beerList[f].get("beer_name"));
break;
} else {
if (f === biLen - 1) {
// Assuming $modal is the bootstrap modal
indexCache = f;
//$modal.modal().one('hide.bs.modal', loop);
$('#importModal').modal('show').one('hidden.bs.modal', loop) // <-- this one works like a charm
return;
}
}
}
}
loop();
答案 0 :(得分:3)
var indexCache;
function loop() {
var index = indexCache || 0;
for (var f = index; f < biLen; f++) {
var ean_parsed = parsedList[i][1];
if (beerList[f].get("ean") === ean_parsed) {
console.log("Beer found: " + beerList[f].get("beer_name"));
break;
} else {
if (f === biLen - 1) {
// Assuming $modal is the bootstrap modal
indexCache = f;
$modal.modal().one('hide.bs.modal', loop);
return;
}
}
}
}
loop();
我们有一个indexCache变量,用于保存正在处理的啤酒的索引。
如果找到了EAN,太棒了!我们处理它并继续下一个啤酒。
如果没有,我们将当前啤酒索引存储在缓存中并显示模态并立即退出循环。隐藏模态时,循环将从缓存的索引中恢复。
PS。我假设你正在使用Twitter Bootstrap模式。因此,为事件添加处理程序&#39; hide.bs.modal&#39;。但是,如果是这种情况,可以使用自己的模态实现来完成类似的事情。