У меня есть цикл for, который вызывает функцию в Javascript (getItemsForFolderID) для каждого элемента в этом массиве (subfolders.data). В этом случае в массиве 80 элементов, но я могу видеть только операторы журнала для 6 ... getItemsForFolderID содержит обещание, которое вызывает функцию, которая возвращает обещание, и вызывает REST API для получения элементов (это работает!)
Кто-нибудь знает, почему делается всего 6 звонков? Я получаю 80 консольных записей для console.info('Getting Items for: ' + subfolders.data[j].id), но только шесть из них.
console.info('No items for folder: ' + folderID); или console.info('There were items');
Вот цикл:
for (var j = 0; j < subfolders.data.length; j++) {
console.info('Getting Items for: ' + subfolders.data[j].id);
getItemsForFolderID(subfolders.data[j].id);
}
И функция, которую мы вызываем:
function getItemsForFolderID(folderID) {
var getItemsPromise = getItemsForFolderIDFromAPI(folderID);
getItemsPromise.then(function(items) {
if (items.data.length === 0) {
console.info('No items for folder: ' + folderID);
}
else {
console.info('There were items');
}
});
}
var RateLimiter = require('request-rate-limiter');
var limiter = new RateLimiter({rate: 100, interval: 60, backoffCode: 429, backoffTime: 15, maxWaitingTime: 2600
});
function getItemsForFolderIDFromAPI(folderID) {
return new Promise(function(resolve, reject) {
limiter.request({
url: url + '/' + folderID,
method: 'get',
headers: headers
}).then(function (response) {
resolve(JSON.parse(response.body));
}).catch(function (err) {
reject(error);
});
});
}
Извиняюсь, @MarkMeyer, я исправил это. Это была опечатка
@Pointy Я запускаю этот код как приложение nodejs из VS Code, и я не знаю, как просматривать исходящие HTTP-запросы там. Я получаю ответы на шесть запросов, но не больше.
@Pointy Я добавил эту функцию, чтобы помочь диагностировать проблему
Избегайте Антипаттерн конструктора Promise!
может быть запрос на блокировку браузера .. проверьте это наш stackoverflow.com/questions/985431/…
@VishalRajole Спасибо за это! Не был в курсе! Я запускаю решение через командную строку с помощью узла, поэтому как мне узнать, какой браузер я использую? Браузер вообще фактор?
@Bergi Это плохая практика? Не могли бы вы связать меня со статьей, описывающей передовой опыт? Я заинтересован в улучшении :)
@MattTheHack Да, это так, и я уже привел ответы, которые должны помочь вам избежать этого.
@MattTheHack Если вы запускаете это в узле, значит, вы не используете браузер, и комментарий Вишала не применяется
@MattTheHack Я предполагал, что вы используете браузер. В любом случае, какую версию узла вы используете. Надеюсь, это поможет stackoverflow.com/questions/12060869/…



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


Что вы видите на вкладке сети (инструменты разработчика)? Можете ли вы сказать, было ли сделано 80 HTTP-запросов? А как насчет ответов? Что показывают журналы вашего сервера? Как именно выглядит
getItemsForFolderIDFromAPI()?