2016-11-07 2 views
0

Хорошо, поэтому я провел последний день, пытаясь что-то понять, я относительно новичок в кодировании, поэтому, если это извините, извините. Я в настоящее время работает над ботом, который запрашивает 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 

Я не могу показаться, чтобы быть в состоянии сделать пробег петли правильно, я не хочу просить помогите, но я застрял. Мне грустно говорить. Спасибо заранее.

+0

В условие завершения цикла всегда верно. 'global.count = 10' ** возвращает **' 10', что является 'true'. '=' является присваиванием, ** '===' ** является сопоставлением. Однако даже если вы это исправите, это не сработает, потому что обратные вызовы не могут быть выполнены до того, как цикл завершится, но цикл может завершиться только в том случае, если обратный вызов работает и устанавливает правильное значение. Эта статья очень важна для понимания модели обработки JavaScript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop. –

+0

Ваше условие завершения цикла всегда верно, потому что вы назначаете его в состоянии. измените его на 'global.count === 10', чтобы исправить эту часть. Другая проблема, с которой вы столкнетесь, заключается в том, что ваши 'request()' s будут асинхронными, поэтому окончательный запрос может завершиться перед одним из других запросов и затем установить 'global.count = 0;' только для того, чтобы быть перезаписанным один из предыдущих запросов. Вероятно, вы не должны пытаться сделать это в цикле, скорее вызовите функцию, которая делает запрос, а затем, когда этот запрос будет завершен, сделайте запрос со следующей страницей и так далее, пока у вас не будет всех страниц. – Dymos

+0

@Dymos: обратные вызовы никогда не будут выполнены, потому что цикл блокирует все остальное. –

ответ

0

Я думаю, что какая-то путаница в вопросе и объяснить ясно ???

В вашем письменном виде для цикла непрерывно повторять Вы хотите как это некоторые вещи еще ..

в моей мысли это должно быть для навигации загрузки страницы (каждая страница содержит 10)

global.count = 10; 
for(var i = 1; i< =global.count; i++) 
{ 
-- Write Your code here --- 
} 
+0

Его предполагается перемещаться по страницам, но как @felixKling сказал, что он не сможет слишком, потому что функция не будет работать из-за цикла – MGomeyy

+0

@MGomeyy Вот почему я puttig для цикла, как с условием, вы можете попробовать выше i am declaring for loop –

+0

Цикл должен останавливаться, когда 'info.length' не равно 10, поэтому то, что вы сказали, будет работать в моем случае, спасибо, но – MGomeyy

Смежные вопросы