在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()
时,它会根据在栏中进行的研究,在divid=“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之后。