2015-03-23 5 views
0

У меня есть эти методыКак добавить еще один аргумент в яваскрипта обратного вызова

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 и передать его в обработчик успеха и ошибок (как я заметил), так как обратные вызовы имеют еще один аргумент по умолчанию я действительно путаю, как это сделать

ответ

1

Вы можете обернуть свои обработчики в анонимной функции, а также захватить ссылку на будущие периоды в его закрытии, как это:

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

Я не уверен, что это хороший образец, который вы пытаетесь реализовать, но вышеупомянутый метод должен достичь того, что вы ищете.

Преимущество этого в том, что интерфейс к вашему обработчику ошибок не изменяется (в приведенном выше случае только один параметр, объект ошибки), но внутри вы используете свой обработчик с несколькими параметрами.

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

Ваш deferred будут захвачены в маленьком замыкании, и ваши обработчики будут вызываться с соответствующими аргументами.

+0

Спасибо, что работает, так как ответ @doldt отправлен раньше, я принимаю его ответ – RezaRahmati

Смежные вопросы