在JavaScript中的异步函数结束时运行同步函数?

时间:2015-11-13 18:28:03

标签: javascript asynchronous synchronous

大家好我有一个异步函数,我必须在异步结束时运行同步函数:

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"中创建一个页面结果。

我操纵网址并获取搜索到的关键字...

正确创建SERP。

问题出在哪里???

问题在于某些结果有图像而有些结果没有...而且我希望每个结果的描述性摘要与边距左边的距离相同......

然后具有图像的结果将为它们提供填充..

这种情况发生在“modifica()

但是如果未完全创建结果页面,则函数modifica()将出现问题(使用图像填充结果)。因此,在modifica()的末尾启动googlata ()是绝对必要的。

SetInterval是一个非常糟糕的解决方案......因为有时googlata()设置的时间超过1300毫秒,然后会产生其他错误......

这是JSFIDDLE:

http://jsfiddle.net/2rg86vm6/

我希望你现在可以帮助我......

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

我解决了:D谢谢龙你让我想得更多....我会解释: 第一个有图像的td,像孩子一样有很多标签,但也标有“a”(里面会有标签图片)...当google创建serp时,也许所有td都被隐藏了,但结果将是一个图像,还有所有dom(也许图像会加载)。所以我改变了函数“modifica()”,并且我只为没有“a”标签作为子项的结果添加了paddding;)...

这是真的:

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

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

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

谢谢!