2015-11-13 148 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/

謝謝!