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