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 回答