2014-09-02 6 views
0

저는 JavaScript가 처음인데 간단한 스크립트를 만들려고합니다. 기본적으로 ROBLOX라는 웹 사이트에서 가장 낮은 가격의 상품을 찾고 싶습니다. 어떤 이유로 든이 스크립트는 무한 루프를 일으켜 내 Chrome을 파괴합니다. 아무도 도와 줄 수 있습니까왜 무한 루프가 발생합니까?

function getLowest(id) { 
    var give; 
    for (var page = 1; page < 33; page++) { 
     var link = "http://www.roblox.com/catalog/browse.aspx?CatalogContext=1&Subcategory=9&CurrencyType=0&pxMin=0&pxMax=0&SortType=0&SortAggregation=3&SortCurrency=0&PageNumber=" + page + "&IncludeNotForSale=false&LegendExpanded=true&Category=3"; 
     $.get(link, function(data) { 
      for (var item in data) { 
       if (data[item]["AssetId"] == id) { 
        give = data[item]["BestPrice"]; 
       } 
      } 
     }) 
    } 
    if (give) { 
     return give; 
    } 
} 

console.log(getLowest(prompt("Enter the ID to find the lowest price of"))); 
+6

무한 루프가 있으며 어떻게 안정적인 Chrome을 사용하고 있는지 어떻게 알 수 있습니까? 이것은 요청이'return give; '시점까지 완료되지 않았기 때문에 아무것도 반환하지 않는 것처럼 보입니다. – Ryan

+0

이전에 콘솔에 쓰고 있었기 때문에 루프를 무한히 반복 할 수 있습니다. – David

+1

두 번째 minitech의 코멘트. 또한 Chrome을 손상시키는 경우 동시에 32 개의 HTTP 연결을 열려고 시도했을 것입니다. –

답변

0

실제로 도움을 주셔서 감사합니다. 당신은 무한 루프 문제에 직면하지 않는

function getLowest(id) { 
    for (var page = 1; page < 33; page++) { 
     var link = "http://www.roblox.com/catalog/json?browse.aspx?CatalogContext=1&Subcategory=9&CurrencyType=0&pxMin=0&pxMax=0&SortType=0&SortAggregation=3&SortCurrency=0&PageNumber=" + page + "&IncludeNotForSale=false&LegendExpanded=true&Category=3"; 
     $.get(link, function(data) { 
      for (var item in data) { 
       if (data[item]["AssetId"] == id) { 
        console.log(data[item]["BestPrice"]); 
        return; 
       } 
      } 
     }) 
    } 
} 

getLowest(prompt("Enter the ID to find the lowest price of")); 
0

하지만, 비동기 로딩 문제 :

이것은 내가 함께 끝난 것입니다. 당신을 가정

for (var page = 1; page < 33; page++) { 
    $.get(link, function(data) { 
     for (var item in data) { 
      if (data[item]["AssetId"] == id) { 
       give = data[item]["BestPrice"]; 
      } 
     } 
    }) 
} 

이 페이지를 조회하는 jQuery의 $.get를 사용하고, $.get의 기본 동작은 비동기에서 페이지를 조회하는 것입니다. 따라서이 루프는 $.get에있는 모든 콜백을 기다리지 않고 완료되며, 이는 루프를 종료 할 때 give이 정의되지 않은 상태로 남아 있음을 나타냅니다.

이 솔루션은 당신이 당신의 대답에 제안 하나, 또는

  • $.get는 콜백 기능을 비동기 수집을 수행하고 다시 작성 async.js를 사용하여 '
  • $.ajax({ url: link, async: false }).done(function(data) {})를 사용하여 동기화 할 것

    모든 쿼리 작업이 완료된 후

관련 문제