2014-07-21 2 views
-2

이것은 언어와 무관 한 일반적인 프로그래밍 질문 또는 논리 질문으로 간주 될 수 있습니다.함수에서 비동기 적으로 획득 한 값을 반환하십시오.

내가 가지고있는 자바 스크립트 코드의 조각 다음

코멘트에 명시된 바와 같이
... 
{text: 'Modelo', dataIndex: 'model', filterable: true, 
    renderer: function(value) { 

     // this will asynchronously load the object "Model" from the database which have primary key equals to "value". 
     MyApp.model.Model.load(value, { 
      scope: this, 
      success: function(record, operation) { 
       // this will be executed if succeeded. I need to return the "record" parameter in the outer function. 
      } 
     }); 
     return value; // There must be a way to return the "record" parameter from above. 
    } 
}, 
... 

, 나는로부터 반환해야 값 record을 검색하는 내부 비동기 기능 load를 호출하는 외부 기능 renderer있다 외부 기능.

외부 함수에서 선언 된 변수를 내부 함수에서 선언 한 다음 반환했지만 루프가 무한대로 끝나기를 기다렸다가 빈 같은-loop과 같은 추악한 것을 시도했습니다.

+0

[내 변수가 함수 내에서 수정 된 후 왜 변경되지 않습니까? - 비동기 코드 참조] (http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) 및 [How to Ajax 호출의 응답을 반환 하시겠습니까?] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call). 짧은 대답 : 값을 반환하거나 콜백을 사용하거나 약속 할 수 없습니다. –

+0

항상 downvote가 있어야하는 이유는 무엇입니까? 왜 내가이 웹 사이트로 돌아가 도움을 요청하는지 모르겠다. 나는 합법적 인 질문을하고있다. 그리고 downvoting은 단지 어리석은 질문이고 사람들은 기꺼이 도와 줄 의사가 없다고 느낀다. 선생님이 학교에서 한 말을 기억하십시오. _ 두려워하지 마십시오. 이 웹 사이트는 그렇지 않습니다. 그래서 이전의 "포럼"스타일의 질문 및 답변이 더 효과적 일 것이라고 확신합니다. –

답변

0

반송이 발생하면 success 콜백이 발생하므로 직접 반환 할 수 없습니다. 당신이 콜백 받아 renderer의 함수 서명을 변경하는 경우 대신이 ... 코드에서이 콜백 패턴을 계속할 수 있습니다 : 지금

myObj.renderer(someVal,function(rec,op){ 
    //do something 
}); 

:

{text: 'Modelo', dataIndex: 'model', filterable: true, 
    renderer: function(value, successCb) {  
     MyApp.model.Model.load(value, { 
      scope: this, 
      success: function(record, operation) { 
       if(successCb){ 
        successCb(record, operation); 
       } 
      } 
     }); 
     //return void, and communicate back to the caller using successCb above. 
    } 
}, 

renderer의 호출자는 콜백을 공급 함수에서 데이터를 비동기 적으로 가져올 수 있습니다.

관련 문제