2014-06-05 1 views
3

내 문제는 간단하지만 온라인에서는 찾을 수 없습니다. 나는 전화 앱 개발을 끝내고 있으며 비동기 실행으로 인해 코르도바에 몇 가지 문제가 있습니다. 지금 당장은 다음과 같이해야합니다.코르도바를 동기화하는 방법

var finishedFl = 0; 
cordova.exec(
function(info) { 
    .... [Function goes here] 
    finishedFl = 1; 
}, 
function (info) { 
    alert('Error'); 
}, 
'Smapps', 'getInfo', []); 

While(finishedFl != 1){ 
    wait; 
} 

anotherFunction(); 

이 프로그래밍 방식은 매우 복잡하고 분명히 좋지 않습니다. 그래서 질문은 : 코르도바 실행을 동기시키는 방법이 있습니까?

+1

동기식은 OOP 클라이언트 - 서버 응용 프로그램에서 좋지 않은 생각입니다. 동기가되면 무엇을 달성하려고합니까? –

+0

cordova.exec() 실행 후 WebService에 연결해야하기 때문에. 비동기 실행은 WS의 변수 값을 비게합니다. 결국 결국 응용 프로그램이 실패하게됩니다. – pablo10ksk

+0

은 cordova에 대한 콜백 만 사용합니다. –

답변

2

exec 메서드는 MesageQueue를 통해 OS에 메시지를 보내고 일반적으로 다른 스레드에서 수행하고 동작합니다 (UI 스레드에서 실행되지 않음). 네이티브 호출이 완료되면 메시지가 JS 계층에 보내지고 successCallaback이 호출됩니다. 오류가 발생하면 다른 메시지가 전송되고 errorCallaback이 실행됩니다. 플러그인 작성자라면 UI 스레드에서 뭔가를 수행하기 위해 runOnUIThread (new Runnable() {...}) 메소드 (적어도 Android에서는)를 호출 할 수 있지만 UI 차단으로 인해 권장되지 않습니다. .

"콜백 지옥"에 이르는 콜백 아이디어가 마음에 들지 않는다면. 콜백을 약속으로 래핑 할 수 있습니다. 그래서 다음과 같이 할 수 있습니다 cordova.wrappedExec(). then (successCallback) .then (doSomethingElse); 여기 좀 봐 https://github.com/stackp/promisejs