我想为客户端构建一个灵活的小API来支持后端。为了方便使用默认的成功/错误处理程序或编写自己的处理程序,我计划为用户提供一个或两个都不传递处理程序的选项。我尝试如下。
后端文件“API”的片段:
function someRPCcall(method, url, data, successHandler, failedHandler) {
// checking if successHandler and failedHandler are defined and passed functions
if (paramType1 === 'undefined' || paramType1 === 'null') {
successHandlerHelper = defaultSuccessRESTHandler;
} else if (paramType1 === 'function') {
successHandlerHelper = successHandler;
}
if (paramType2 === 'undefined' || paramType2 === 'null') {
failedHandlerHelper = defaultFailedRESTHandler;
} else if (paramType2 === 'function') {
failedHandlerHelper = failedHandler;
}
ajaxCall(method, url, data, successHandlerHelper, failedHandlerHelper);
}
function ajaxCall(method, url, data, success, failed) {
console.log("in ajaxCcall");
$.ajax({
type: method,
contentType: "application/json",
data: data,
url: url,
success: success,
error: failed
dataType: "json"
});
console.log("ajaxCall - call done");
}
客户端代码文件的片段
someRPCcall将由另一个文件中的函数间接调用:
someFunctionRPCcall("bla", null, errorHandler);
而searchWordOccurrenceRPCcall正在调用someRPCcall
在failureHandler之上将是一个自定义的Handler,但也应该可以跟随调用:
someFunctionRPCcall("bla", null, successHandler, errorHandler);
someFunctionRPCcall("bla", null, successHandler);
someFunctionRPCcall("bla", null);
我听说过拍摄一个物体,其中的功能将被定义....
此代码不会调用自定义处理程序,但我想这是另一个问题(使用apply缺少或类似的东西) 我想在这里提出的问题是: 有没有办法将这两个函数作为可选参数传递?那个提议使用对象怎么样?
由于
答案 0 :(得分:1)
正如您所提到的,您可以使用函数来获取对象,例如:
function someRPCcall(args) {
var method = args.method || "POST";
var url = args.url || "default";
var data = args.data || {};
var successHandler = args.success || defaultSuccessRESTHandler;
var failedHandler = args.failed || defaultFailedRESTHandler;
ajaxCall(method, url, data, successHandler, failedHandler);
}
您将在上面注意到,如果args
对象上没有属性,则会给出默认值。
然后按如下方式调用:
someRPCcall({
url : "the url",
failed: function() { ... }
});
当然,如果未设置某些值,您可以抛出异常,例如url
:
function someRPCcall(args) {
if(!args.url) {
throw "url must be set";
}
}