回调函数接受更多参数

时间:2012-11-10 13:47:04

标签: javascript callback

我将以下方法添加到对象中:

loadAPIServiceData : function(service, format, term, callback) {
        return $.when($.ajax({
            url: service + ((term) ? term : '') + '?format=' + format
        })).done(function(result) {
            return callback.apply(result, [ result ]);
        });
    },

当我加载数据时,回调函数会传递一个我需要进一步向下的参数(result显然得到了我从AJAX调用中得到的任何东西)。我需要的是能够在调用时向回调函数添加更多参数,并且在那里仍然有result:)

为了更加明确这一点,当我说“我需要的是能够在调用回调函数时添加更多参数,并且仍然具有result时,这就是我的意思。那里“:

var test = loadAPIServiceData('some_service', 'json', 'some_term', function(result, another_parameter, ...) {

});

2 个答案:

答案 0 :(得分:1)

您可以使用bind申请参数,而无需修改loadAPIServiceData

function myCallback(arg1, arg2, result) {
    //
}

loadAPIServiceData(service, format, term, myCallback.bind(this, arg1, arg2));

如果您希望将result保留在第一个arg位置,则此代码会使用arguments object将所有其他参数发送给回调:

loadAPIServiceData : function(service, format, term, callback) {
    var add_args = Array.prototype.slice.call(arguments, 4);

    return $.when($.ajax({
        url: service + ((term) ? term : '') + '?format=' + format
    })).done(function(result) {
        return callback.apply(this, result, [ result].concat(add_args));
    });
},

function myCallback(result, arg1, arg2) {
    //
}

loadAPIServiceData(service, format, term, myCallback, "arg1", "arg2");

答案 1 :(得分:0)

不确定我是否正确理解了您的问题,但这是否有意义?

function addOptionalParams(result) {
    var params = [];
    params.push(result);

    // do logic to decide if you need more params
    // if you need more params, push them to the params array
    if(weNeedMoreParams) {
        params.push('foo');
        params.push('bar');
    }

    return params;
}

loadAPIServiceData : function(service, format, term, callback) {
    return $.when($.ajax({
        url: service + ((term) ? term : '') + '?format=' + format
    })).done(function(result) {
        var callbackArgs = addOptionalParams(result);

        return callback.apply(this, callbackArgs);
    });
},

这是'done'函数,它决定了它将使用。

调用回调的参数