2016-12-08 162 views
1

我有一個邏輯如下圖所示,返回諾內for循環

getSpecificCell: function(tableObject, rowText, columnCss) { 
    var ele = element.all(by.repeater(tableObject)).count().then(function(count) { 
     for (var i = 0; i < count; i++) { 
     return element(by.repeater(tableObject).row(i)).getText().then(function(txt) { 
     if (txt.indexOf(rowText) !== -1) { 
      return element(by.repeater(tableObject).row(i)).element(by.css('[' + columnCss + ']')); 
     } 
     }); 
    } 
    }); 
    return ele; 
} 

但它返回的第一次迭代本身的價值。 是否有可能在這種for循環中返回promise,或者我們有其他解決方案嗎?

+0

您在代碼中有多個承諾。你想要返回哪一個?如果你想組合promise,把它們放在一個數組中並使用promise.all函數。請參閱:http://stackoverflow.com/questions/24852126/is-there-a-way-to-resolve-multiple-promises-with-protractor – raichu

+0

需要返回for循環內的承諾 – Prabhu

+0

我的意思是說你有循環中的多重承諾。每次迭代都會產生一個或兩個承諾。 – raichu

回答

2

首先,您不需要在ElementArrayFinder中使用for循環。這就是each()方法的用途。

其次,你根本不需要循環。這聽起來像你應該使用filter()來獲得符合你的規格的表格單元格,儘管我不確定你想要完成的是什麼。

var table = element.all(by.repeater(tableObject)); 
// list is an ElementArrayFinder of all elements that matched the filter 
var list = table.filter(function (elem) { 
    return elem.getText().then(function (text) { 
     return txt.indexOf(rowText) !== -1 
    }) 
}); 

// do something with list 
list.count().then(function (count) { 
    console.log(count); 
});