2015-11-13 3 views
0

Привет, ребята, у меня есть асинхронная функция, и я должен работать синхронную функцию в конце асинхронный:Запустить синхронную функцию в конце асинхронной функции в JavaScript?

google.setOnLoadCallback(googlata); 

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

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

Я попытался добавление setInterval к ​​синхронной функции и, очевидно, она работает ... но мне не нравится ...

Я хотел бы более точный метод и, конечно, просто ...

существует?

EDIT

Я создал jsfiddle, но, очевидно, не работает в прямых линиях, потому что код является более сложным ... поэтому я объясню, как это работает:

У меня есть page.html с простой строкой поиска и отправки данных в paginaX.html через «получить» метод ...

в этом мой paginaX есть код моего jsfiddle ....

Когда функция googlata(), он создает страницу результатов в div id="cse" согласно исследованиям, проведенным в баре.

Я манипулировать URL и получать ключевые слова искали ...

SERP создан правильно.

Где проблема ???

Проблема заключается в том, что некоторые результатах есть изображение, а некоторые нет ... и я хочу, чтобы описательные резюме каждого результата находилось на одинаковом расстоянии от края левого ...

тогда результатов, есть изображение даст им отступы ..

это происходит в «modifica()»

Но если страница результатов не полностью создана, проблемы будут функционировать modifica() (давая отступы к результатам с изображением). Так что строго необходимо modifica() запущен в конце googlata().

SetInterval очень плохое решение ... потому что иногда googlata() работает более 1300 мс набор, а затем создает другие ошибки ...

ЭТО JSFIDDLE:

http://jsfiddle.net/2rg86vm6/

I надежда может вы мне помочь ...

+0

Функция 'googlata (callback) { Функция возврата() { alert ('hello'); callback(); } } google.setOnLoadCallback (googlata (endgooglata)); 'ответьте на свой вопрос? – tforgione

+0

Вы хотите сказать, что основной поток ждет завершения действия? – Pablo

+0

@DragonRock я не понимаю ... пожалуйста, если можно написать ответ на пример – Borja

ответ

2

Это должно работать:

Отредактированы так это сено ds параметр для функции окончания.

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» (внутри внутри будет изображение тега) ... когда google создает серп, возможно, все td скрыты , но результаты, которые будут изображением, имеют еще все dom (возможно, изображение загрузится). Поэтому я изменить функцию «modifica()», и я добавить paddding только для результатов, которые не имеют «» тег, как дети;) ...

так это верно:

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

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

это обновление jsfiddle: http://jsfiddle.net/2rg86vm6/1/

спасибо!

Смежные вопросы