在JavaScript中异步函数的末尾运行同步函数?

在JavaScript中异步函数的末尾运行同步函数?,javascript,asynchronous,synchronous,Javascript,Asynchronous,Synchronous,大家好,我有一个异步函数,我必须在异步函数结束时运行同步函数: google.setOnLoadCallback(googlata); function googlata(){ alert('hello'); } function endgooglata(){ alert('i am synchronous'); } 我尝试将setInterval添加到同步函数中,显然它是有效的。。。但是我不喜欢 我想要一个更精确的方法 当然很简单 存在吗 编辑 我已经创建了JSFIDLE,但显然不

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

google.setOnLoadCallback(googlata);

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

function endgooglata(){
 alert('i am synchronous'); 
}
我尝试将setInterval添加到同步函数中,显然它是有效的。。。但是我不喜欢

我想要一个更精确的方法 当然很简单

存在吗

编辑

我已经创建了JSFIDLE,但显然不能以直线方式工作,因为代码更复杂。。。因此,我将解释它是如何工作的:

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

在这是我的paginaX中,有我的JSFIDLE的代码

当运行函数
googlata()
时,它会根据在栏中进行的研究,在div
id=“cse”
中创建一个页面结果

我操纵URL并获取搜索到的关键字

已正确创建SERP

问题在哪里

问题是有些结果有图像,有些结果没有。。。我希望每个结果的描述性总结与左边距的距离相同

然后,包含图像的结果将为它们提供填充

这发生在“
modifica()
”中

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

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

这是JSFIDLE:

我希望你现在能帮我…

这应该可以:

已编辑,以便向结束函数发送参数

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);
}

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

这是真的:

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

function modifica(){
//code....
}
这是更新JSFIDLE:


谢谢

Whould
function googlata(callback){return function(){alert('hello');callback();}}}google.setOnLoadCallback(googlata(endgooglata))回答你的问题?你的意思是主线程等待操作结束吗?@DragonRock我不明白…如果可能,请用example@user3162975是的,我想哈维尔回答了你的问题question@DragonRock你能帮我吗?不行:((我已经试过了,但什么也没有做……我会解释:我做了一个非常综合的例子,但在我的例子中,googlata()创建了一个SERP,而endgooglata()则对获得的结果起作用(通过更改css)。因此,我必须等待结果页被创建……您能分享您的代码吗?虽然不太清楚,但似乎您只是想从回调中将一些参数发送到
endgooglata
?否是太大的代码:/n还有其他方法等待异步函数结束吗?如果您正在寻找更复杂的方法来处理asyn对于一些非常复杂的函数,你可能想看看JS的承诺:我不得不告诉你结果页面是结束的,只有在“endgooglata()”能够工作并向每个结果添加css之后。