2013-07-02 108 views
0

我在這裏使用nodejs請求模塊:https://github.com/mikeal/request - 存在涉及的Cookie,但不包含此代碼的一部分。nodejs/JavaScript變量保留其舊值?

原諒非優化代碼,我一直在嘗試各種東西試圖解決這個問題沒有成功。我有這個簡單的腳本:

function getPage(curpage) 
{ 
    if(curpage <= pages) 
    { 
     var newpage = curpage + 1; 
     console.log('getting page '+newpage); 

     request.get({ uri: 'http://someurl.com/test', qs: { p : newpage }}, function(error, response, body) { 
      if(error) 
      { 
       [...] 
      } 
      else 
      { 
       console.log(response.req.path); 
      } 
      getPage(newpage); 
     }); 
    } 
    else 
    { 
     console.log("We're done!\n"); 
     process.exit(); 
    } 
} 

這裏的問題,是我response.req.path似乎變得停留在2我得到:

getting page 1 
/id/bradpitt5/inventoryhistory?p=1 
getting page 2 
/id/bradpitt5/inventoryhistory?p=2 
getting page 3 
/id/bradpitt5/inventoryhistory?p=2 
getting page 4 
/id/bradpitt5/inventoryhistory?p=2 

正如你所看到的,「NEWPAGE」在獲取頁面時正確使用,但請求路徑設置錯誤?我無法理解這一點。任何人都可以找出我在這裏做錯了嗎?

我剛從getPage(0)開始;

我也做這個使用不同的方法,只是爲了確保我是不是瘋了:

for(var i = 1; i <= pages; i++) { 
    urls.push({'url' : 'http://somepage.com/test?p='+ i, 'done' : false }); 
} 

function getNextPage() { 
    for(var i = 0; i < pages; i++) { 
     if(urls[i].done == false) { 
      break; 
     } 
    } 

    if(urls[i] && urls[i].done == false) { 
     urls[i].done = true; 
     console.log('requesting: '+ urls[ i ].url); 

     request.get(urls[ i ].url, function(error, response, body) { 
       if(error) { 
        [...] 
       } else { 
        console.log('received: '+ response.req.path +' ok. '); 
       } 
       getNextPage(); 
      } 
     ); 
    } else { 
     console.log("we're done!"); 
     process.exit(); 
    } 
} 

這也被卡在第2頁。

+0

如果你改變從遞歸到迭代的流程,你仍然得到相同的結果嗎? – user1

+0

我改變了這個完整的循環經過一個數組進行測試,我得到了同樣的結果。 – ruinernix

回答

0

的含義是:

{ uri: 'http://someurl.com/test', qs: { p : newpage }} 

不會每次更新request.get()被調用。我不知道這是值得嘗試創建一個新的變量:

var options = { 
    uri: 'http://someurl.com/test', 
    qs: { 
     p: newpage 
    } 
}; 

// let's debug just to be sure 
console.log(" options = %s", JSON.stringify(options, null, 2)); 

request.get(options, function(error, response, body) { 
    ... 

我不知道,如果是這樣的話,但我不知道是否函數調用中創建的對象不計算一次。

+0

我發佈了上面的第二個例子,使用完全不同的邏輯,結果相同,這很奇怪。 – ruinernix

0

看起來我只有「2頁」的數據,並且我正在請求將網站重定向到最後一頁,如果我試圖超過頁數。 :(