如何向 javascript 回调添加另一个参数
How to add another argument to a 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;
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 对象并将其传递给成功和错误处理程序(就像我评论的那样),因为默认情况下回调有另一个参数我真的很困惑该怎么做
您可以将处理程序包装在匿名函数中,并在其闭包中捕获对 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 }
);
您的 deferred
将被捕获在小闭包中,并且您的处理程序将使用适当的参数被调用。
我有这些方法
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 对象并将其传递给成功和错误处理程序(就像我评论的那样),因为默认情况下回调有另一个参数我真的很困惑该怎么做
您可以将处理程序包装在匿名函数中,并在其闭包中捕获对 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 }
);
您的 deferred
将被捕获在小闭包中,并且您的处理程序将使用适当的参数被调用。