Как заставить функцию выполняться после завершения асинхронной функции? - PullRequest
1 голос
/ 05 сентября 2011

У меня есть функция, которая обрабатывает большой объем данных, поэтому я обрабатываю данные асинхронно, чтобы позволить браузеру обновить экран. Однако я хотел бы вызвать другую функцию после того, как эта асинхронная функция завершила свою обработку. Это то, что я пытался сделать.

function addObjects(){

object.setSrc(objFilename);
object2.setSrc(objFilname2);

} 

addObjects();

Однако порядок не имеет значения для асинхронного процесса. Как заставить вторую функцию вызываться после завершения обработки первой асинхронной функции?

Ответы [ 3 ]

1 голос
/ 05 сентября 2011

Если вы используете, например,

setTimeout(process1, 200);

для обработки асинхронных данных в функции process1() вы можете вызвать другую функцию обработки в process1():

function process1() {
    // ... process data 1 here
    // when processing data 1 finished then process data 2
    process2();   
}

Вы также можете отложить вызов process2():

function process1() {
    // ... process data 1 here
    // when processing data 1 finished then process data 2 asynchronously, but after data 1
    setTimeout(process2, 200); 
}
1 голос
/ 05 сентября 2011

Не можете ли вы добавить обратный вызов к вашему вызову функции?

Как таковой:

function doSomethingIntensive( callback )
{
  //Do some stuff
  for(var i = 0; i < 10000; i++); //Something intensive

  //we're done, fire the callback
  if(callback)
    callback();
}

doSomethingIntensive( function()
{
 //And we're done, do some more
   doSomethingIntensive();
});
0 голосов
/ 05 сентября 2011
function addObjects(){
    object.setSrc(objFilename);
    object.addEventListener("onSrcSet", function() {
        object2.setSrc(objFilname2);
    }
} 

addObjects();

конечно, это означает, что вы используете правильное имя для события вместо произвольно выбранного "onSrcSet".

и что вы имели в виду эти вызовы функций, когда говорили о «втором» и «первом».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...