JS добавить обратный вызов для запуска следующей функции? - PullRequest
0 голосов
/ 29 сентября 2010

Как добавить какой-нибудь обратный вызов, чтобы я мог выполнить дополнительный код после завершения render ()?

function next(){
    target = max;
    render();

    //When render complete, do some more
    //change values....
    //render();

}

function prev(){
    target = min;
    render();

    //When render complete, do some more
}

var timer;

function render(){
    timer = setInterval(renderIt, 40);
}

function renderIt(){

    if (condition) {
    clearInterval(timer);
    return;
        }

    //Do the stuff

}

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

имеют render принять ссылку на функцию в качестве параметра.

function next(){ 
    target = max; 

    // pass a function reference to render
    render( function() { 
        //When render complete, do some more 
        //change values.... 
        alert('moved next!'); 
    } ); 

} 

function prev(){ 
    target = min; 
    render( function() { 
        //When render complete, do some more 
        alert('moved prev!');      
    } ); 

} 

var timer; 

function render(fn){ 
    // create an anonymous function to wrap your original call
    timer = setInterval(function() { 
                           // can't pass fn along to renderIt if undefined
                           if (typeof fn === 'undefined') { fn = null; }
                           renderIt(fn); 
                       }, 40); 
} 

function renderIt(fn){ 

    if (condition) { 
        clearInterval(timer); 

       //Do the stuff 
        if (typeof fn === 'function') {
            // invoke the passed method 
            fn();        
        }
        return; 
    } 
}

Вам не нужно указывать render анонимную функцию для параметра fn - это может быть любое заданное вами имя функции.

1 голос
/ 29 сентября 2010
function next(callback){
    target = max;
    render(callback);

    //When render complete, do some more
    //change values....
    //render();

}
function render(callback){
    timer = setInterval(renderIt, 40);
    callback();
}

next(function(){alert('this is a callback');};
...