2016-08-10 3 views
0

나는 엔터테인먼트 용 챠트 봇을 작성하려고하는데, 주요 기능 중 하나는 밈 조회이다. 먼저 파이썬에서 작성했지만 지금은 자바 스크립트로 다시 작성하고 있습니다. 클라이언트 측에서 완전히 실행할 수 있기 때문입니다. 그것은 도움이 될 경우DevTools에서 충돌이 발생하는 스크립트

function meme(srch) { 
    reqUrl = "http://api.pixplorer.co.uk/image?amount=1&size=tb&word=meme"; 
    memesrch = ""; 
    while (srch) { 
    memesrch += "+" + srch[0]; 
    srch.slice(1); 
    } 
    reqUrl += memesrch; 
    $.get(reqUrl, function(result) { 
    memeUrl = result['images'][0]['imageurl']; 
    }); 
    return "<a href='" + memeUrl + "'><img src='" + memeUrl + "' style='height: 130px;' /></a>"; 
} 

여기에 원래 파이썬 함수는 다음과 같습니다 : 여기

내 자바 스크립트 meme() 기능입니다

def meme(srch): 
    reqUrl = "http://api.pixplorer.co.uk/image?amount=1&size=tb&word=meme" 
    if srch: 
     memesrch = "" 
     while srch: 
      memesrch += srch[0] + "+" 
      srch = srch[1:] 
     memesrch = memesrch[:-1] 
     reqUrl += memesrch 
    memeUrl = eval(urllib2.urlopen(reqUrl).read())['images'][0]['imageurl'] 
    return "<a href='" + memeUrl + "'><img src='" + memeUrl + "' style='height: 130px;' /></a>" 

이와 내 문제는 내가 처음에 meme()을 실행할 때이다 페이지로드/재로드 후 콘솔에 변수 memeUrl이 정의되어 있지 않다고 표시됩니다. 그런 다음 두 번째 이후부터 제대로 작동합니다. 그러나 meme(["doge"])을 입력하거나 배열에 문자열을 입력하거나 meme("hello")과 같은 문자열을 meme() 함수에 제공하면 아무런 오류가 반환되지 않으며 오류도 반환되지 않습니다. 그 후에 내가 입력 한 내용은 아무 것도 반환하지 않으며 1+1 또는 3 또는 $과 같은 것조차 반환하지 않습니다. 몇 초 후에 웹 페이지가 충돌합니다. 몇 가지 스크린 샷이 있습니다 : Screenshot of DevTools, Screenshot of Webpage Crash.

이 문제의 원인이 될 수있는 유일한 생각은 무한 루프이지만이 코드에는 아무 것도 없습니다.

while (srch) { 
    ... 
} 

srch.slice

는 "SRCH의"originial 배열을 변경하지 않는다 :

+0

[? 내가 비동기 호출의 응답을 반환 할 방법] (의 가능한 중복 http://stackoverflow.com/questions/14220321/-i-return-from-an-asynchronous-call) – Andreas

+0

['Array.prototype.join()'] (https://developer.mozilla.org/en-US/docs/) 웹/자바 스크립트/참조/글로벌 _ 객체/배열/조인) – Andreas

답변

0

무한 루프있다. 어쩌면이 문제를 해결합니다 : 당신의 while 루프가 수행하는 대신 다음

memesrch = (srch typeof Array) 
    ? '+' + srch.join('+') 
    : '+' + srch; 
+0

도움 주셔서 감사합니다! while 루프를 제안 사항으로 바꿀 때 유효하지 않은 토큰 유형이 표시됩니다. 그러나 원래 스크립트에서'srch.slice (1)'을'srch = srch.slice (1)'로 대체하면 한 가지 문제가 발생해도 문제없이 완벽하게 작동합니다. 첫 번째 요청은 memeUrl이 정의되지 않았다는 것을 나타내고, 그 이후의 모든 요청은 이전 요청의 이미지를 반환합니다. 나는이 요청을 얻은 후에'while (! memeUrl) {}'로 이것을 고치려고했으나 그것을 고치지는 못했다. –

+0

'$ .get' 앞에이 코드를 넣으십시오 :'var memeUrl = '';'. – simialbi

+0

그 일을 시도했지만 아무 것도 반환하지 않습니다. 나는 'while (! memeUrl) {}'을 while (! memeUrl) {console.log (1);}로 변경하여 다른 무한 루프에 있는지, 그리고 어떤 이유인지 확인하려고 시도했다. –

관련 문제