쉽게 재사용 할 수 있도록 아래 함수를 추상화하려고합니다. 함수는 기본적으로 약속을 최대 5 회 또는 약속이 해결 될 때까지 반환하는 함수를 실행합니다. DataFn에서 특히 힘든 시간을 보내고 있습니다. 그것은 약속을 반환하지만 run 함수가 첫 번째 실패 이후 두 번 실행되면 서버에 다시 연결하려고 시도하지 않습니다. 함수 이름을 하드 코딩하면 작동하지만 전달 된 매개 변수는 처음부터 작동합니다.함수 추상화 및 매개 변수로 함수 약속
var persistentPromise = (function() {
var maxRetries = 0;
return function run(dataFn, messageObject) {
var deferred = $q.defer();
dataFn.$promise.then(function (response) {
deferred.resolve(response);
},
function (response) {
if(response == 503) {
if(++maxRetries < 6) {
messageService.emit(messageObject.warning);
$timeout(function() {
run(dataFn, messageObject);
}, 10000);
} else {
messageService.emit(messageObject.end);
deferred.reject(messageObject.na);
}
}
});
deferred.promise.then(function (response) {
$scope.transactionData = {
transactions: kpiService.totalArrayAmountWithRange(response.rows, 2, 0, response.rows.length/2) + kpiService.totalArrayAmountWithRange(response.rows, 2, response.rows.length/2 + 1, response.rows.length)
};
usSpinnerService.stop('loaderspin');
}, function(response) {
usSpinnerService.stop('loaderspin');
$scope.transactionData = {
transactions: response.na.msg
};
});
};
})();
/* calling the function */
persistentPromise(promiseFunction, someMessageObject);
따라하기가 어렵습니다. 특히'dataFn'은 무엇입니까? 호출되지 않았으며 사용되는 유일한 측면은'. $ promise' 속성입니다. –
그것은 약속을 반환하는 ajax 호출이있는 함수입니다 –
그래서 어디에서 호출됩니까? –