2016-11-03 6 views
0

У меня есть эта функцияпроверка Javascript, если массив заполняется из функции

offer.getReceivedItems(function(err, items) { 

Он возвращает массив (элементы) или выдает ошибку err если это не удалось. Много раз, когда нет err, массив элементов пуст. Как

[] 

Но когда этот массив пуст, я должен попробовать ту же функцию снова

offer.getReceivedItems(function(err, items) { 

, но как я могу вернуться к нему, когда элементы пусто ...

я попытался так много, но я не могу найти его ...

Код выглядит

offer.getReceivedItems(function(err, items) { 
     if (err) { 
      console.log("Couldn't get received items: " + err); 
      offer.decline(); 
     } else { 
      console.log(items); 
      items.forEach(function(item,i,arr){ 
      .... 

forEach не работает, когда есть пустой массив ...

+0

'items.length' будет равен нулю, если в массиве ничего нет. – vlaz

+0

@vlaz, что я знаю. Но как я могу «перезапустить», что он снова пытается эту функцию ... я могу сделать 'if (items.length> 0)', но как я могу сделать, что он снова предложит.getReceivedItems? – Scholli

+0

Сделайте это рекурсивным, вызывая offer.getReceivedItems снова в другом. Или, еще лучше, используйте Promises с разрешением и отказом. –

ответ

1

Вы должны проверить, если массив пуст, прежде чем перебор с forEach. Проверьте items.length.

Существует более подробное подробное объяснение в this StackOverflow answer.

+0

Я знаю, что с проверкой длины, но как я могу перезапустить с начала, если длина равна нулю? ... это моя проблема:/ – Scholli

+0

if (err || items.length === 0) {.. ..? – teroi

+0

Какая функция 'offer.getReceivedItems' внутри? (Например, если это называется 'tryItems', вот так:' function tryItems (args) {offer.getRecievedItems ...} ') Вы можете рекурсивно вызывать эту внешнюю функцию внутри' else' вашего фрагмента кода, как это было предложено Скотт Маркус в комментарии выше, например 'else {if (items.length === 0) {tryItems (args); } ...} ' – user2441511

1

У меня возникли проблемы с пониманием того, что вы пытаетесь сделать, но помогает ли вам следующее?

var callBack = function(err, items) { 
     if (err) { 
      console.log("Couldn't get received items: " + err); 
      offer.decline(); 
      offer.getReceivedItems(callBack); // Call again 
     } else { 
      console.log(items); 
      items.forEach(function(item,i,arr){ 
      .... 
     } 
    }; 

// Original call 
offer.getReceivedItems(callBack); 
Смежные вопросы