【问题标题】:Run synchronous function at the end of an asynchronous function in JavaScript?在 JavaScript 中的异步函数末尾运行同步函数?
【发布时间】:2015-11-13 18:28:03
【问题描述】:

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

google.setOnLoadCallback(googlata);

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

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

我尝试将 setInterval 添加到同步函数中,显然它可以工作......但我不喜欢......

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

存在吗?

编辑

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

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

在 This is my paginaX 中有我的 jsfiddle 的代码 ....

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

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

SERP 已正确创建。

问题出在哪里???

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

然后有图像的结果会给他们填充..

这发生在“modifica()

但是如果结果页面没有完全创建,函数modifica() 会出现问题(用图像给结果填充)。所以绝对有必要在googlata ()的末尾启动modifica()

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

这是 JSFIDDLE:

http://jsfiddle.net/2rg86vm6/

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

【问题讨论】:

  • function googlata(callback){ return function() { alert('hello'); callback(); } } google.setOnLoadCallback(googlata(endgooglata)); 回答你的问题?
  • 你的意思是主线程在等待action结束吗?
  • @DragonRock 我不明白......如果可能的话,请用一个例子写一个答案
  • @user3162975 是的,我想哈维尔回答了你的问题
  • @DragonRock 你能帮帮我吗?

标签: javascript asynchronous synchronous


【解决方案1】:

这应该可行:

已编辑,因此它将参数发送到结束函数。

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

【讨论】:

  • 不起作用 :(( 我已经尝试过了,但什么都没有......我会解释一下:我做了一个非常综合的例子,但在我的例子中 googlata () 创建了一个 SERP,而endgooglata() 作用于获得的结果(通过更改 css )。所以我必须等待结果页面创建...
  • 你能分享你的代码吗?不是很清楚,但似乎您只想从回调中向endgooglata 发送一些参数?
  • no is too large code:/还有其他方法可以等待异步函数结束吗?
  • 如果您正在寻找一种更复杂的方式来处理异步函数,您可能需要查看 JS Promises:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 我不得不让结果页面结束,只有在“endgooglata()”可以工作并将css添加到每个结果之后。
【解决方案2】:

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

这是真的:

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

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

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

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2023-02-05
    相关资源
    最近更新 更多