Javascript JS添加回调以运行下一个函数?
如何添加某种回调,以便在render()完成后运行进一步的代码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
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;
}
}