我在javascript中有这个功能:
function getResponse(){
setInterval(function(){
value = player.getCurrentTime();
getValue(value);
},100);
}
function getValue(value){
var lines = value;
//alert("Value is: " + lines);
return lines;
}
当我想让线变量时,我没有得到任何回应;
NSString *response = [self.webView stringByEvaluatingJavaScriptFromString:@"getResponse()"];
NSString *resonse2 = [self.webView stringByEvaluatingJavaScriptFromString:@"getValue();"];
NSLog(@"oh %@ %@",response,resonse2);
但如果我取消警报,警报会返回正确的响应。我不知道我需要做什么。
谢谢!
答案 0 :(得分:0)
function getResponse(){
setInterval(function(){
value = player.getCurrentTime();
getValue(value);
},100);
}
因此该函数在100 ms后异步调用匿名函数。
经过100毫秒后,它会将value
设置为当前时间,并调用getValue()
我不知道value
来自哪里或哪里,但我会假设它在范围内(可能是全球性的)
function getValue(value){
var lines = value;
//alert("Value is: " + lines);
return lines;
}
此函数基本上只返回给定的值。我真的不知道JS的范围规则,但是当你从iOS调用它时,你没有传入任何东西,所以也许它获得了前一个(gloabl?)value
变量的值。
那么我们在iOS中做了什么?
NSString *response = [self.webView stringByEvaluatingJavaScriptFromString:@"getResponse()"];
NSString *resonse2 = [self.webView stringByEvaluatingJavaScriptFromString:@"getValue();"];
首先,我们致电getResponse()
,在100ms 之后启动对getValue()
的异步调用。
然后,我们立即自己调用getValue()
,没有参数,并返回到响应。
然而,当显示警报时它会起作用。我的JS知识有点缺乏,但我猜它是因为显示警报占用了等待100毫秒的时间。然后,在警报完成时,(全局?)变量value
已由getResponse()
填充,这意味着它返回值。
我们如何解决这个问题? 同步完成这一切有什么问题吗?我们必须有2个功能吗? 我原来的想法是,为什么我们不能这样做:
function getCurrentTime() {
return player.getCurrentTime();
}