如何在 Javascript 中重新绑定()相同的函数?
How to re-bind() the same function in Javascript?
我正在编写一个包装器,它接受一个回调函数以传递给另一个函数或直接执行。问题是另一个函数绑定了参数,回调参数具有不同的参数编号。因此初始绑定将接受需要替换的字符串占位符。但是怎么办?
function callback(){}
function asyncfunc1(a,b,callback,d){ callback();}
function asyncfunc2(a,b,c,callback){ callback();}
function asyncfunc3(callback,b,c,d){ callback();}
function wrap(cond,func,callback){
if (cond) {
// here I want to execute the passed function
// however instead of real callback, I have a placeholder bound
// so how do I bind it again to replace it with real callback?
func();
}
else callback();
}
wrap(cond,asyncfunc1.bind(null,param1,param2,'callback',param3),callback)
// this is what it's used for, is to create a flow of conditional callbacks
wrap(cond1,asyncfunc1.bind(null,param1,param2,'callback',param4),function(){
wrap(cond2,asyncfunc2.bind(null,param1,param2,param3,'callback'),function(){
wrap(cond3,asyncfunc3.bind(null,'callback',param2,param3,param4),callback
}
})
我将避免绑定并将带有参数的函数作为数组传递。
function wrap(cond,fn_arr,callback){
if (cond) {
if (fn_arr instanceof Array){
var func=fn_arr.shift();
if (fn_arr.includes('callback')) {
fn_arr[fn_arr.indexOf('callback')] = callback;
}
func(...fn_arr)
} else fn_arr();
}
else callack();
}
然后用很少的数组操作就可以完成替换技巧。
wrap(cond,[asyncfunc,param1,param2,'callback',param4],callback)
我正在编写一个包装器,它接受一个回调函数以传递给另一个函数或直接执行。问题是另一个函数绑定了参数,回调参数具有不同的参数编号。因此初始绑定将接受需要替换的字符串占位符。但是怎么办?
function callback(){}
function asyncfunc1(a,b,callback,d){ callback();}
function asyncfunc2(a,b,c,callback){ callback();}
function asyncfunc3(callback,b,c,d){ callback();}
function wrap(cond,func,callback){
if (cond) {
// here I want to execute the passed function
// however instead of real callback, I have a placeholder bound
// so how do I bind it again to replace it with real callback?
func();
}
else callback();
}
wrap(cond,asyncfunc1.bind(null,param1,param2,'callback',param3),callback)
// this is what it's used for, is to create a flow of conditional callbacks
wrap(cond1,asyncfunc1.bind(null,param1,param2,'callback',param4),function(){
wrap(cond2,asyncfunc2.bind(null,param1,param2,param3,'callback'),function(){
wrap(cond3,asyncfunc3.bind(null,'callback',param2,param3,param4),callback
}
})
我将避免绑定并将带有参数的函数作为数组传递。
function wrap(cond,fn_arr,callback){
if (cond) {
if (fn_arr instanceof Array){
var func=fn_arr.shift();
if (fn_arr.includes('callback')) {
fn_arr[fn_arr.indexOf('callback')] = callback;
}
func(...fn_arr)
} else fn_arr();
}
else callack();
}
然后用很少的数组操作就可以完成替换技巧。
wrap(cond,[asyncfunc,param1,param2,'callback',param4],callback)