iOS将值返回到异步javascript调用

时间:2012-12-21 05:03:40

标签: javascript ios uiwebview

下面显示的是调用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;
    })
  }    
};

1 个答案:

答案 0 :(得分: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.