我想抽象下面的函数,以便我可以轻松地重用。函数基本上运行一个给定的函数,该函数返回一个最大承诺5次或直到承诺解决。 DataFn让我特别难过。它返回一个承诺,但是当运行函数第一次失败后第二次执行时,它不会再尝试连接到服务器。如果我硬编码函数名称的作品,但作为传递的参数只能在开始工作。功能抽象和承诺函数作为参数
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调用 –
那么它叫什么名字? –