3

以下に示すのは、iOS と Android のネイティブ関数を呼び出す js コードです。この関数は別の js メソッドから呼び出されます。この関数への js 呼び出しは非同期であるため、iOS では値を返すことができませんでしたが、Android では値を返すことができました。問題なく値を返します。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;
    })
  }    
};
4

1 に答える 1

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.
于 2012-12-21T05:25:00.783 に答える