2016-01-12 8 views
0

Есть ли способ создать ресурс $ с несколькими URL-адресами, которые используются как цепные резервные копии? Поэтому вместо того, чтобы возвращать ошибку, когда хост недоступен на первом URL-адресе, ресурс пытается отправить запрос ко второму URL-адресу и так далее.Угловой - ngResource с резервными URL-адресами

Спасибо за любые идеи,

Jensen

ответ

0

Эта функция оборачивает $ ngResource и принимает последний параметр (массив обратных вызовов [{успех, ошибка}, {успех, ошибка}] и перебирает каждый используя обещание.

//using lodash 
 
function ngResourceWrapper() { 
 
    var args = _.toArray(arguments); 
 
    var callbacks = _.last(args); 
 
    if (_.isArray(callbacks)) { 
 
     args.splice(args.length - 1, 1); //remove last element 
 
    } 
 
    var promise = $ngResouce.apply($ngResouce, args).promise; 
 

 
    if (callbacks) { 
 
     callbacks 
 
     .forEach(function(callback) { 
 
      promise 
 
       .then(callbacks.success, callbacks.error); 
 
      } 
 

 
     } 
 

 
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>

ли это делать то, что вы хотите?

$ngResource.get(url).then(success, useFallbackUrl); 

function useFallbackUrl(){ // you can also store these somewhere 
    $ngResource.get(url2).then(success); 
} 

function success(){ 
    //do stuff 
} 
+0

Вместо указания резервной копии по каждому запросу я надеюсь скрыть логику повтора. Таким образом, ресурс можно построить следующим образом: $ resource ([url, fallback1, fallback2, fallbackN],/* другие параметры ngResource * /); – Jensen