В таблице пользователь может выбрать любое количество строк для загрузки в «upload API», но в этих выбранных строках любая из строк содержит статус «НЕ ОК». Мне нужно показать всплывающее окно, что статус «не в порядке», пожалуйста, «отмените выбор». эта строка, если строки содержат статус OK, тогда я должен вызвать «загрузить API».
onUpload(){
let selectedRows=this.agGrid.api.getSelectedRows();
selectedRows.forEach((row:any,i:any)=>{
if ( row.status==='OK'){
/** upload API CALL **/
}else{
this.isTooltipUpload=true;
setTimeout(()=>{
this.isTooltipUpload=false;
},2000)
}
})
}
selectedRows :[
{athlete: 'Michael Phelps', age: 23, status:'OK', year: 2008, date: '24/08/2008', …}
{athlete: 'Michael Phelps', age: 19, status:'OK', year: 2004, date: '29/08/2004', …}
{athlete: 'Michael Phelps', age: 27, status:'Not ok', year: 2012, date: '12/08/2012', …}
]
здесь я зацикливаю selectedRows, используя метод forEach, и сравниваю row.status==='OK', если это правда, мне нужно вызвать API, иначе нужно показать всплывающее окно (this.isTooltipUpload=true).
что я получаю:
в selectedRows даже статус «НЕ ОК» «если» (если условие ложно) вызывает API, а в противном случае вызывает всплывающее окно
может ли кто-нибудь помочь мне, где я делаю неправильно.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В настоящее время ваш код рассматривает каждую строку отдельно, проверяя правильность каждой отдельной строки. Вы напрямую делаете вызов API, когда текущая строка действительна, не гарантируя заранее, что каждая отдельная строка действительна.
Вы можете использовать Array#some, чтобы проверить, является ли какая-либо строка недопустимой, прежде чем пытаться вызывать API.
if (selectedRows.some(r => r.status !== 'OK')) {
// show error popup
} else {
// loop over selectedRows and make each API call
}