2015-11-13 95 views
0

好家伙我有一个异步函数,我必须在异步结束时运行同步功能:在JavaScript中的异步函数结束处运行同步函数?

google.setOnLoadCallback(googlata); 

function googlata(){ 
alert('hello'); 
} 

function endgooglata(){ 
alert('i am synchronous'); 
} 

我尝试添加的setInterval的同步功能,显然它的作品...但我不喜欢...

我想更精确的方法 ,当然简单...

存在?

编辑

我创建了的jsfiddle但显然在直线因为代码比较复杂不能正常工作,所以,我将解释它是如何工作的:

我有一个用一个简单的搜索栏page.html中,并通过“get”方法将数据发送到paginaX.html ...

在这是我paginaX有我的jsfiddle的代码....

当功能googlata()正在运行,根据在该栏中进行的研究,它会在div id="cse"中创建一个页面结果。

我操纵URL和提取的关键字搜索...

的SERP正确创建。

问题在哪里???

的问题是,一些成果具有图像和一些不......,我想每个结果的描述摘要是从利润率左...

然后将结果相同距离有图像会给他们的填充..

这种情况发生在“modifica()

但如果结果页面没有完全建立,功能modifica()意志的问题(给填充与图像的结果)。所以在googlata()的末尾推出modifica()是绝对必要的。

的setInterval是一个非常糟糕的解决方案...因为有时googlata()员工超过1300毫秒集,然后它会创建其他错误...

THIS IS的jsfiddle:

http://jsfiddle.net/2rg86vm6/

我希望你能帮助我,现在......

+0

函数googlata(回调){ 返回函数(){ alert('hello'); callback(); } } google.setOnLoadCallback(googlata(endgooglata));'回答你的问题? – tforgione

+0

你的意思是主线程等待行动结束? – Pablo

+0

@DragonRock我不明白...请尽可能用一个例子写一个答案 – Borja

回答

2

这应该工作:

编辑,以便它仙为结束函数指定一个参数。

function endgooglata(data){ 
    alert('i am synchronous'); 
    // code to process data 
} 

google.setOnLoadCallback(googlata); 

function googlata(){ 
    alert('hello'); 
    var generatedSERP = "A new thing generated in googlata()"; 
    endgooglata(generatedSERP); 
} 
+0

不起作用:(( 我已经试过但没有......我会解释一下:我做了一个非常合成的例子,但在我的情况googlata()创建一个SERP,而endgooglata()作用于(通过改变CSS),所以我必须等待结果页面被创建... – Borja

+0

你能分享你的代码吗?它不是很清楚,但似乎你只是想发送一些参数到'endgooglata'从回调? –

+0

不是太大代码:/ 还有其他方法可以等待异步函数结束吗? – Borja

0

我解决了:D谢谢龙你让我想得更多....我会解释: 第一个td有一个图像,有像儿童很多标签,但也标记“a”(内部会有标签图像)...当谷歌创建serp,也许所有td都隐藏,但结果将是一个图像,还有所有dom(也许图像会加载)。所以我改变功能“modifica()”,和我添加paddding仅适用于没有“一”的标签儿童结果;)...

所以是真实的:

function googlata(){ 
//code.... 
modifica(); 
} 

function modifica(){ 
//code.... 
} 

这是更新jsfiddle:http://jsfiddle.net/2rg86vm6/1/

谢谢!