2016-11-07 85 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()將是異步的,所以最終的請求可能會在其他請求之前完成,然後設置'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循環像條件,你可以嘗試以上我我聲明爲循環 –

+0

當'info.length'不等於10時,循環需要停止,所以你說什麼在我的情況下不會工作,謝謝 – MGomeyy