如何在javascript中将两个函数作为参数传递,两者都可以是可选的

时间:2014-01-10 22:19:41

标签: javascript function parameters

我想为客户端构建一个灵活的小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缺少或类似的东西) 我想在这里提出的问题是: 有没有办法将这两个函数作为可选参数传递?那个提议使用对象怎么样?

由于

1 个答案:

答案 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";
    }
}