가 이동
은 "// 여기에 몇 가지 더 많은 물건을하지만, 우리는 우리가 부모로부터 결과를 얻을 때까지 일시 중지 할 필요가있다"는에 섹션 다른 부분. 콜백이있는 데이터베이스에 원격 호출을하고 있다고 가정합니다. 어떤 메커니즘을 사용하고 있는지 잘 모르겠지만 RemoteObject를 가정 해 봅시다.
디스패치하는 사용자 지정 이벤트에 함수를 전달할 수 있습니다. 코드의 데이터베이스 섹션은 해당 함수 포인터를 AsyncToken에 첨부하거나 클래스 인스턴스에 추가 할 수 있습니다. 그런 다음 결과가 돌아 오면 이벤트의 일부로 전달한 함수를 호출 할 수 있습니다. 비동기 프로그래밍의 즐거움.
저는 Cairngorm과 Swiz (Swiz가 선호하는 프레임 워크입니다)에서 사용 된 패턴을 보도록 권장합니다.이 프레임 워크에서 데이터베이스 호출을 수행하는 방식이 여기에서하려는 작업과 정확히 일치합니다. 예를 들어
, 당신은 같은 것을 할 수있다 : 나는 콜백 승/PHP는 서비스를 사용하고
dispatchEvent(new MyCustomEvent("getDBcontents", callBackFunction));
private function callBackFunction(stuffToProcess:Object):void {
//do more stuff here after the stuff is returned
}
//first create MyCustomEvent class extending Event
//Then you need something to handle the event, you can build the event listener yourself, or use something like Swiz to make your life easier
//here is your event handler that you can call yourself, or assign through Swiz Cairngorm
var st:Function;
public myEventHandler(event:MyCustomEvent):void {
st = event.callBackFunction; //your param on your custom function
var token:AsyncToken=this.service.doSomething();
var responder:mx.rpc.Responder=new mx.rpc.Responder(genericResultsHandler, faultHandler);
token.addResponder(responder);
}
genericResultsHandler(result:ResultEvent):void{
if (st != null)
st(result.data);
}
. "결과가 돌아 오면 이벤트의 일부로 전달한 기능을 호출 할 수 있습니다."... 어떻게하면됩니까? –
나는 Swiz와 Cairngorm을 모두 들여다 보았지만 잘 따라갈 수 없었다. 데이터베이스에서 결과를 다시 얻을 때까지 스크립트를 "강제 실행"할 방법이 없습니다. –
아니요, 원하는대로 코드를 '일시 중지'할 수있는 방법이 없습니다. 네트워크 호출은 actionscript에서 비동기 적이므로 콜백 메커니즘을 제공해야합니다. 이 콜백 메카니즘은 찾고자하는 의사 '일시 정지'를 제공합니다. Swiz를보기 위해 돌아가는 것이 좋습니다. Swiz가 당신이하고자하는 일에 대해 매우 쉽게 구성 할 수 있도록 도와 줄 수 있기 때문입니다. – Scott