2016-11-07 3 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

ループ終了条件は、条件内での代入のため常にtrueです。その部分を修正するために 'global.count === 10 'に変更してください。あなたが次に実行するもう1つの問題は 'request()'が非同期であるため、他のリクエストの前に最後のリクエストが終了してから 'global.count = 0; 'が上書きされるだけです以前のリクエストの1つ。おそらく、ループ内でこれをやろうとするのではなく、要求を行う関数を呼び出してから、その要求が完了したときに次のページで要求を行うなど、すべてのページがあるまで行う必要があります。 – 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していますループのために宣言しています –

+0

'info.length'が10に等しくないときにループを停止する必要がありますので、私の場合はうまくいきませんでした。ありがとうございました – MGomeyy

関連する問題