2017-09-08 4 views
0

Supposons que j'ai une application qui repose sur un service, dont il existe de nombreuses instances. Je veux automatiquement réessayer la demande sur l'instance du prochain service.Réessayer automatiquement la requête sur d'autres URL

Ceci est une demande d'exemple:

var url = 'http://myservice1.com:3001' 
function getItems() { 
    return new Promise((resolve, reject) => { 
    request(url+'/api/items',(body,error) => { 
     if(error) reject(error) 
     else resolve(body) 
    }) 
    }) 
} 
+0

@JaromandaX C'est vrai. Je l'ai utilisé pour la clearification parce que cela pourrait devenir plus complexe. Merci pour les suggestions, je vais changer quelque chose, c'est en fait l'utilisation de cela :) – Strernd

+0

@JaromandaX Je suis juste allé paresseux et tourné 'request' qui utilise normalement un rappel dans une fonction de promesse. Maintenant, il devrait faire plus de sens – Strernd

+0

, va supprimer mes commentaires: p –

Répondre

0

Vous pouvez utiliser une enveloppe pour la fonction Promise, qui exécute la fonction Promise avec plusieurs urls. async-wrap implémente ceci. Vous pouvez l'utiliser comme ceci:

function getItems(){ 
    var urls = getServiceUrls() // Returns array 
    return coalesce(urls, requestItems) 

    function requestItems(url) { 
     return new Promise((resolve, reject) => { 
      request(url+'/api/items', (body,error) => { 
       if(error) reject(error) 
       else resolve(body) 
      }) 
     }) 
    } 
} 

Disclaimer: Je développé ce paquet, parce que j'avais ce problème et cherché une solution propre. Je suis ouvert à toute autre suggestion pour résoudre ce problème.