ѕроверка достоверности во всех строках таблицы

fetchValues ( SearchString ) { var matchcount = 0 ; var count = this . ContentTable . —троки . count (); for ( var i = 0 ; i < count - 1 ; i ++) { вернуть это . ContentTable . элемент ( by . css ( '[id * = "DXDataRow' + i + '"]' )) . затем (( строка ) => { вернуть это . ContentTable . –оу . элемент ( с . CSS ( '[ID = "uxSetList_tccell' + ¤ + '-1" ]' )) . «атем (( колонка ) => { вар CoinInfo = this . ContentTable . Row . Column . element ( by . css ( 'a' )). getText (); if ( CoinInfo . indexOf ( SearchString )> = 0 ) { matchcount = matchcount + 1 } return matchcount ; }); }); } } имеет таблицу whfor () ch consPromise.all () st из примерно 50 строк и столбцов на странице. var myPromises = []; for ( var i = 0 ; i < count ; i ++) { myPromises . толчок ( это . ContentTable . Ёлемент ( с . CSS ( '[ID = "DXDataRow' + ¤ + '"]' )) . «атем ( / * ... бла ... * / ) ); } // возвращает одно значение из этой функции, содержащее данные из всех обещаний, возвращающих Promise . все ( myPromises ). then (( promResultsArray ) => { / * подсчитать количество совпадений * / }); хотите получить все строки из таблицы и написать функцию, чтобы проверить, содержит ли второй столбец всех слов слово Ђсереброї. я пробовал код ниже, но он не работает. ћожет кто-то, пожалуйста, помогите, где ¤ отсутствую, ¤ не настолько хорош с обещани¤ми Javascript. ≈сли найдено совпадение с строкой, ¤ просто хочу увеличить счетчик, а затем вернуть счетчик в конце.

i

javascript,protractor,

2

Ответов: 1


1 прин¤т

прежде всего, вы возвращаете значение из своего for()цикла. Ёто гарантирует, что ваш цикл будет запускатьс¤ только один раз, и вы только когда-нибудь будете рассматривать одну строку. Ёто то, что вы хотите? (нет, действительно, ¤ пон¤ти¤ не имею.) ¬ы пытаетесь создать много обещаний и объединить свои результаты в один номер? ¬ы можете использовать .then()дл¤ объединени¤ значений всех обещаний, которые вы создаете, и вернуть значение из этого мета-обещани¤:

i

во-вторых, ¤ думаю, что ваши обещани¤ сами написаны неправильно. ¬ы считаете, что значение того, iкогда выполн¤етс¤ обратный вызов вашего обещани¤, совпадает с значением того, iкогда был определен обратный вызов вашего обещани¤ . »з-за того, как обещани¤ работают в JS, на самом деле это не так.

„то происходит, так это то, что ваша iпетл¤ создает кучу обещаний, а затем, в какой-то неопределенной точке в будущем , одно из этих обещаний разрешаетс¤, и функци¤, которую вы передали ее count - 1методу, запускаетс¤. Ёта функци¤ знает о том, что iэто точно в теле функции, в конце концов! - но значение iпр¤мо сейчас равно значению for(). ћы сейчас в будущем, помните, и i === count - 1цикл завершилс¤, и условие завершени¤ дл¤ вашего цикла - это когда i. Ёто будет иметь место дл¤ каждого отдельного обещани¤, которое вы создаете в этом цикле, потому что все они выполн¤ютс¤ после завершени¤ цикла.

¬ы можете исправить это несколькими пут¤ми. ¬еро¤тно, самым чистым ¤вл¤етс¤ объ¤вление новой переменной, инициализированной текущим значением iи никогда не измененной, и ссылатьс¤ на то, что внутри вашего .then()обратного вызова:

var i = 0;
var myPromises = [];
for (i = 0; i < count; i++) {
  var currentCount = i;
  myPromises.push(this.ContentTable.element(by.css('[id*="DXDataRow'+currentCount+'"]'))
    .then(/* ...blah blah blah ... */)
  );
}
// return a single value from this function containing data from all promises
return Promise.all(myPromises).then((promiseResultsArray) => {
    /* calculate match count */
});

если вам нужна дополнительна¤ информаци¤, есть много вопросов о том, как использовать обещани¤.

JavaScript, транспортир,