2014-02-22 4 views
0

스크립트 자체가 정상적으로 작동합니다. 그것은 오류가 없습니다. 그러나 7,500 회 출장 중 35 명이 성공했습니다. Regex의 성공률을 어떻게 향상시킬 수 있습니까? 지금 당장은 일을하고 있지 않습니다.이 스크립트의 성공률이 낮은

var IDs = [136758649, 116770724, 136171998]//A lot more IDS than this 
var PriceWanting = 60 
var scanneditems = 0 
var itemerror = 0 
document.write('<p id = "title">Total number bought: 0 items for a total of 0</p>') 
document.write('<p id = "scanned">Items scanned: 0</p>') 
document.write('<p id = "itemerrors">Items scanned: 0</p>') 
var buys = 0 
var totalrobuxspent = 0 
console.log("Bot started") 
var loop = setInterval(function() 
{ 
    for (var i = 0;i<IDs.length;i++) { 
    $.get(" http://m.roblox.com/items/" + IDs[i] + "/privatesales",function(data) { 
     var Regex = /\<span class="currency-robux">([\d,]+)\<\/span\>/; 
     var PriceSelling = data.match(Regex); 
     scanneditems = scanneditems + 1 
     document.getElementById("scanned").innerHTML = "Scanned items: " + scanneditems 
     PriceSelling = PriceSelling ? PriceSelling[1] : ''; 
     if (PriceSelling.length < 1) { 
     itemerrors = itemerrors + 1 
     document.getElementById(''itemserror'').innerHTML = ''Total errors: '' + itemerrors 
     return 
     } 
     PriceSelling = Number(PriceSelling.replace(",","")) 
     PriceSelling = PriceSelling * 1 
     totalrobuxspent = totalrobuxspent + PriceSelling 
     var remaining = PriceWanting - PriceSelling 
     if (remaining >= -0.1) 
     { 
     buys = buys + 1 
     document.getElementById("title").innerHTML = "Total number of items bought: " + buys + " for a total of " + totalrobuxspent + " " 
var Regex2 = /<a href="\/Catalog\/VerifyTransfer\DuserAssetOptionId=([\d,]+)\Damp;expectedPrice=([\d,]+)">/ 
           var HatBuyId = data.match(Regex2)[1] 
           var HatBuyLink = "http://m.roblox.com/Catalog/VerifyPurchase?assetid=" + HatBuyId + " &type=robux&expectedPrice=" + PriceSelling 
var Explorer = document.createElement('iframe'); 
           function Buy(){ 
     Explorer.contentDocument.forms[0].submit(); 
     console.log("Item purchase complete, scanning again.") 
     var inf = document.createElement('div'); 
     inf.style.fontSize = "18px"; 
     inf.style.background = "rgba(0,0,5,0)"; 
     inf.style.position = "absolute"; 
     inf.style.width = "100%"; 
     inf.style.height = "18pt"; 
     inf.innerText = "Bot currently running. Purchases: "+answer; 
     document.body.appendChild(inf); 
           }; 
           Explorer.onload = Buy; 
           Explorer.width = "100%"; 
           Explorer.height = "85%"; 
           Explorer.src = HatBuyLink; 
           document.body.innerHTML = ""; 
           document.body.appendChild(Explorer); 
    } 
    }) 
} 
},500) 
+0

예제를 시각화 할 수 있도록 [SSCCE] (http://www.sscce.org/)에 기고하십시오. –

+0

거기에 주요 부분을 추가했습니다. – user3341815

+0

그냥 거기에'return'을 넣어주세요. 어쨌든 '계속'은 무엇을 의미할까요? –

답변

2

.get은 비동기입니다. 즉, 콜백 함수는 응답이 반환 될 때까지 실행되지 않습니다. 그 시점에서, 당신은 더 이상 루프에 있지 않으며 사실 루프는 이미 완료되었습니다.

다소 다른 문제이지만 this Question은 비동기 호출이 작동하는 방식을 이해하는 데 매우 유용합니다. 함수가 자신의 컨텍스트를 가지고 있으며, 루프와 같은 상황이 아니므로 여기에 또한


, continue는 여전히, 심지어 비동기 행동하지 않고, 불법 것이다. 이 간단한 예제는 불법 것하고 상황에 맞는 문제를 이해하기 쉬울 수 있습니다 : 함수는 익명 함수입니다 귀하의 경우

for(var i=0; i<10; i++){ 
    someFunc(); 
} 

function someFunc(){ 
    continue; // illegal 
} 

비록를 동일한 개념이 적용됩니다.

+0

실행의 순서보다는 상황에 대한 질문이 더 많습니다. 그러나 이것은 대체로 정확합니다. –

+1

이 답변은 정확합니다. OP는 동일한 결과를 얻기 위해'continue;'대신'return;'을 사용할 수 있습니다; 잘못된 데이터로 인해 해당 ajax 처리기를 종료합니다. –

+1

@JimmySawczuk 기술적으로 그렇습니다. 그러나 이해의 측면에서, OP는 이러한 콜백이 순차적으로 호출되고 있다고 생각하므로 계속이라는 신념은 루프의 다음 반복으로 넘어갈 것입니다. 조금 다시 말하게 해줘. –

0

코드에 세미콜론을 사용하십시오.

continue; 

은 함수가 아닌 루프에 적용 할 수 있습니다. 함수의 문맥에서 벗어나려면

return; 

키워드를 사용하십시오.