2012-12-21 2 views
3

다음은 iOS 및 Android의 기본 함수를 호출하는 js 코드입니다.이 함수는 다른 js 메서드에서 호출됩니다.이 함수에 대한 js 호출은 비동기 적이므로 호출 할 수 없습니다. 우리는 어떤 문제없이 값을 반환 할 수있는 안드로이드에서 iOS.but의 모든 값을 반환합니다. iOS 제어 dosent 내가 response.Actually 얻을 때까지 기다리지 않으면 우리는 호출자 함수에서 콜백 메서드를 전달할 수있는이 함수 호출을 수정하지 않을 가정합니다 이 문제를 해결할 수 있도록 도와주세요.iOS에서 비동기 자바 스크립트 호출에 대한 값을 반환합니다.

VestaPhoneBridge.IsAvailable = function(featureName) 
{ 
    if(isAndroid()) { 
    if(typeof VestaJavascriptInterface !== 'undefined') 
    { 
     return VestaJavascriptInterface.isAvailable(featureName); 
    } 
    return false; 
    } 
    else {     
    bridge.callHandler('initiateIsAvailableFunction',featureName,function(response) { 
     return response; 
    }) 
    }  
}; 

답변

0

나는이 라인에 대해 이야기하고 있다고 가정합니다.

bridge.callHandler('initiateIsAvailableFunction',featureName,function(response) { 
    return response; 
}) 

문제는 아마도 return 일 것입니다. 비동기 요청이 끝날 때마다 콜백으로 전달하는 익명 함수가 호출됩니다. 즉, callHandler 코드 경로 내부에서 호출됩니다.

그러면 함수가 VestaPhoneBridge.IsAvailable 함수가 아닌 해당 함수로 돌아갑니다. 콜백은 값을 설정하고 값을 반환하는 대신 변경을 수행해야합니다.

function Foo(callback) { 
    callback(); // 42 is returned here, but not assigned to anything! 
} 

function Bar() { 
    var baz = Foo(function() { 
    // You want to return 42. But here you are in a totally different function 
    // scope! You are in the anonymous function's scope, not Bar, so you are not 
    // returning anything to the caller of Bar(). 
    return 42; 
    } 
    alert(baz); // Foo doesn't return anything, so this is undefined! 
} 

alert(Bar()); // This is also undefined, nothing was returned. 
+0

안녕 심미, 답변 주셔서 감사합니다. 이 문제를 해결할 수있는 유일한 방법은 콜백 함수를 사용하는 것입니까? – user1878200

+0

@ user1878200 - 예제를 추가했습니다. 잘하면 사용자가 수행중인 작업이 왜 잘못되었는지 이해하는 데 도움이됩니다. – Aesthete

관련 문제