Javascript 在函数中设置可选回调的最佳方法
在这样的函数中,可选的成功和错误回调的最佳实践是什么?这个方法有意义吗?我觉得有点浮肿 函数声明:Javascript 在函数中设置可选回调的最佳方法,javascript,function,callback,Javascript,Function,Callback,在这样的函数中,可选的成功和错误回调的最佳实践是什么?这个方法有意义吗?我觉得有点浮肿 函数声明: var myFunc = function(myNumber, options){ options = options || {}; options.onSuccess = options.onSuccess || function(){}; options.onError = options.onSuccess || function(){}; var myNe
var myFunc = function(myNumber, options){
options = options || {};
options.onSuccess = options.onSuccess || function(){};
options.onError = options.onSuccess || function(){};
var myNewNumber = myNumber * 2;
if(newVar > 10){
options.onSuccess(myNewNumber);
}else{
options.onError(myNewNumber);
}
}
myFunc(2,{
onError: function(myNewNumber){
// do stuff
},
onSuccess: function(myNewNumber){
// do stuff
}
})
myFunc(2);
通过回调调用它:
var myFunc = function(myNumber, options){
options = options || {};
options.onSuccess = options.onSuccess || function(){};
options.onError = options.onSuccess || function(){};
var myNewNumber = myNumber * 2;
if(newVar > 10){
options.onSuccess(myNewNumber);
}else{
options.onError(myNewNumber);
}
}
myFunc(2,{
onError: function(myNewNumber){
// do stuff
},
onSuccess: function(myNewNumber){
// do stuff
}
})
myFunc(2);
在不回调的情况下调用它:
var myFunc = function(myNumber, options){
options = options || {};
options.onSuccess = options.onSuccess || function(){};
options.onError = options.onSuccess || function(){};
var myNewNumber = myNumber * 2;
if(newVar > 10){
options.onSuccess(myNewNumber);
}else{
options.onError(myNewNumber);
}
}
myFunc(2,{
onError: function(myNewNumber){
// do stuff
},
onSuccess: function(myNewNumber){
// do stuff
}
})
myFunc(2);
在调用函数之前,我会检查函数是否存在:
var myFunc = function(myNumber, options){
options = options || {};
var myNewNumber = myNumber * 2;
if(newVar > 10){
if (options.onSuccess) { options.onSuccess(myNewNumber); }
}else{
if (options.onError) { options.onError(myNewNumber); }
}
}
这取决于您可能调用这些回调的次数。如果它到处都是,那么您的方式可能会更好,或者至少代码更干净。我会在调用函数之前检查函数是否存在:
var myFunc = function(myNumber, options){
options = options || {};
var myNewNumber = myNumber * 2;
if(newVar > 10){
if (options.onSuccess) { options.onSuccess(myNewNumber); }
}else{
if (options.onError) { options.onError(myNewNumber); }
}
}
这取决于您可能调用这些回调的次数。如果到处都是,那么您的方式可能会更好,或者至少代码更干净。需要注意的几点
options.onSuccess=options.onSuccess | | function(){}代码>正在检查成员是否存在,而不是检查其函数
您可能需要options.onSuccess=(typeof options.onSuccess=“function”)?options.onSuccess:函数(){}代码>
onError
选项保持开放状态。onSuccess
和选项。onError
在检查后但在启动回调之前被更改
var myFunc = function(myNumber, options){
options = options || {};
options.onSuccess = options.onSuccess || function(){};
options.onError = options.onSuccess || function(){};
var myNewNumber = myNumber * 2;
setTimeout(function () {
if(newVar > 10){
options.onSuccess(myNewNumber);
}else{
options.onError(myNewNumber);
}
}, 2000);
}
var obj = {
success: function () { alert('foo'); },
error: function () { alert('foo'); },
};
myFunc(10, obj);
delete obj.success;
delete obj.error;
执行回调时,success
和error
将未定义
options.onSuccess=options.onSuccess | | function(){}代码>正在检查成员是否存在,而不是检查其函数
您可能需要options.onSuccess=(typeof options.onSuccess=“function”)?options.onSuccess:函数(){}代码>
onError
选项保持开放状态。onSuccess
和选项。onError
在检查后但在启动回调之前被更改
var myFunc = function(myNumber, options){
options = options || {};
options.onSuccess = options.onSuccess || function(){};
options.onError = options.onSuccess || function(){};
var myNewNumber = myNumber * 2;
setTimeout(function () {
if(newVar > 10){
options.onSuccess(myNewNumber);
}else{
options.onError(myNewNumber);
}
}, 2000);
}
var obj = {
success: function () { alert('foo'); },
error: function () { alert('foo'); },
};
myFunc(10, obj);
delete obj.success;
delete obj.error;
执行回调时,success
和error
将未定义
我觉得你在这里做的很好。就最佳实践而言,您希望了解哪些方面?另一种方法是使用
error
作为第一个传递的参数的单个回调,当没有发生错误时,该参数为null。我看到的一个问题是,您没有检查onSuccess和onError(您在那里有一个输入错误)是否有函数。我想补充一点,我觉得你在这里做的很好。就最佳实践而言,您希望了解哪些方面?另一种方法是使用error
作为第一个传递的参数的单个回调,当没有发生错误时,该参数为null。我看到的一个问题是,您没有检查onSuccess和onError(您在那里有一个输入错误)是否有函数。我想补充一下。非常感谢!我想您想了解的详细信息取决于这是一个公共API还是仅在内部使用。在我的情况下,这只是内部的,所以我知道功能将是功能等。非常感谢!我想您想了解的详细信息取决于这是一个公共API还是仅在内部使用。在我的情况下,它只是内部的,所以我知道函数将是函数等等。对于我的情况,我认为这个答案是最合适的:)对于我的情况,我认为这个答案是最合适的:)