Хорошо, поэтому я провел последний день, пытаясь что-то понять, я относительно новичок в кодировании, поэтому, если это извините, извините. Я в настоящее время работает над ботом, который запрашивает JSON, вот код, который я до сих порЯ не могу запустить цикл, зависящий от переменной от функции
const request = require('request');
const bodyParser = require('body-parser');
global.count = 10;
for (var i = 1; global.count === 10; i++) {
var options = {
url: 'https://www.the100.io/api/v1/groups/2127/users?page=' + i, //Returns 10 entries per page, so loop is to navigate pages
headers: {
'Authorization': 'Token token="Hidden for Privacy"'
}
}
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
var info = JSON.parse(body); //Also need a way to append to info as to add on as the loop progresses, still need to look that up though
console.log(JSON.stringify(info, null, 1)); //Logs the body
global.count = info.length; //Will return the value 10, until there are no more entries and then will terminate loop
}
}
request(options, callback);//Sends request
}
//It just keeps running the loop and doesn't execute the request at the bottom which is what will make the loop terminate, I've tried many things with
//callbacks and nothing has worked so far
Я не могу показаться, чтобы быть в состоянии сделать пробег петли правильно, я не хочу просить помогите, но я застрял. Мне грустно говорить. Спасибо заранее.
В условие завершения цикла всегда верно. 'global.count = 10' ** возвращает **' 10', что является 'true'. '=' является присваиванием, ** '===' ** является сопоставлением. Однако даже если вы это исправите, это не сработает, потому что обратные вызовы не могут быть выполнены до того, как цикл завершится, но цикл может завершиться только в том случае, если обратный вызов работает и устанавливает правильное значение. Эта статья очень важна для понимания модели обработки JavaScript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop. –
Ваше условие завершения цикла всегда верно, потому что вы назначаете его в состоянии. измените его на 'global.count === 10', чтобы исправить эту часть. Другая проблема, с которой вы столкнетесь, заключается в том, что ваши 'request()' s будут асинхронными, поэтому окончательный запрос может завершиться перед одним из других запросов и затем установить 'global.count = 0;' только для того, чтобы быть перезаписанным один из предыдущих запросов. Вероятно, вы не должны пытаться сделать это в цикле, скорее вызовите функцию, которая делает запрос, а затем, когда этот запрос будет завершен, сделайте запрос со следующей страницей и так далее, пока у вас не будет всех страниц. – Dymos
@Dymos: обратные вызовы никогда не будут выполнены, потому что цикл блокирует все остальное. –