Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS添加回调以运行下一个函数?_Javascript_Design Patterns_Function_Callback - Fatal编程技术网

Javascript JS添加回调以运行下一个函数?

Javascript JS添加回调以运行下一个函数?,javascript,design-patterns,function,callback,Javascript,Design Patterns,Function,Callback,如何添加某种回调,以便在render()完成后运行进一步的代码 function next(){ target = max; render(); //When render complete, do some more //change values.... //render(); } function prev(){ target = min; render(); //When render complete, do so

如何添加某种回调,以便在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

}

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

您不必为
fn
参数提供
render
匿名函数-它可以是您定义的任何函数名。

如果我是正确的,您希望在
//执行操作之后运行回调。正确吗?是的,这样渲染的第一部分就完成了,例如将当前对象移出屏幕,然后更改一些值,然后将下一个对象移动到视图中。感谢您的帮助,尽管它似乎会立即触发警报,然后每帧触发一次,直到clearInterval。我只需要在//完成任务后触发警报一次就行了。我明白了。只是将fn向下传递到renderIt(),并将if(typeof fn!=“undefined”){fn();}向下移动到renderIt()中的clearInterval部分。这似乎有效,希望这是正确的方法!那应该很好,很高兴你能成功。我将更新示例以反映您的更改。
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; 
    } 
}