如何向javascript回调添加另一个参数

如何向javascript回调添加另一个参数,javascript,callback,Javascript,Callback,我有这些方法 function successHandler(result/*,deferred*/) { var strResult = ""; if (typeof result === 'object') { strResult = JSON.stringify(result); } else { strResult = result; } var mes = "SUCCESS: \r\n" + strResult;

我有这些方法

function successHandler(result/*,deferred*/) {
    var strResult = "";
    if (typeof result === 'object') {
        strResult = JSON.stringify(result);
    } else {
        strResult = result;
    }
    var mes = "SUCCESS: \r\n" + strResult;
    NotificationService.alert(mes, "پيغام", "تاييد");
    //deferred.resolve();
}

function errorHandler(error/*,deferred*/) {
    var mes = "ERROR: \r\n" + error;
    NotificationService.alert(mes, "خطا", "تاييد");
    //deferred.reject();
}

function init() {
    //var deferred = $q.defer();
    inappbilling.init(successHandler, errorHandler, { showLog: true });
    //return deferred.promise;
}

我需要创建一个deffer对象并将其传递给success and error处理程序(如我所评论的),因为回调默认情况下有另一个参数,我真的很困惑如何做到这一点

您可以将处理程序包装在匿名函数中,并在其闭包中捕获对deferred的引用,如下所示:

inappbilling.init(
    successHandler,
    function(error){ errorHandler(error,deferred); },
    { showLog: true }
);
我不确定这是否是您试图实现的一个好模式,但是上面的方法应该可以实现您想要的

这样做的一个好处是,与错误处理程序的接口没有改变(在上面的例子中,只有一个参数,即错误对象),但在内部使用多参数处理程序

inappbilling.init(
  function(result) { successHandler(result, deferred) },
  function(error) { errorHandler(error, deferred) },
  { showLog: true }
);

您的
延迟
将被捕获在小闭包中,您的处理程序将使用正确的参数进行调用。

谢谢,这是有效的,因为@doldt answer在我接受他的答案之前就发布了