2017-07-29 1 views
0

Ich möchte einen Axios-Aufruf machen, wenn der vorherige Aufruf einen bestimmten Rückgabecode zurückgegeben hat, bevor der nächste erneut versucht wird. So etwas wie der Ausschnitt unten. Ich habe versucht, Axios-Retry, aber ich habe es nur geschafft, die Anfrage erneut zu versuchen, wenn es fehlschlägt, keinen Anruf zu tätigen, bevor Sie die Anfrage wiederholen. Vielen Dank für jede Hilfeaxios - Führen Sie einen Anruf aus, bevor Sie eine Anfrage wiederholen

axios 
 
    .get('http://myapilink.com/users', { 
 
     headers: { 
 
     'access_token': access_token, 
 
     'Content-Type': 'application/json' 
 
     } 
 
    }) 
 
    .then(function (response) { 
 
    // successfull call 
 
    }) 
 
    .err(function (error) { 
 
    // fire an another axios call before retrying the GET request above 
 
    axios 
 
     .post('http://myapilink.com/refresh_token', { 
 
     headers: { 
 
      'refresh_token': refresh_token, 
 
      'Content-Type': 'application/json' 
 
     } 
 
     }) 
 
     .then(function (response) { 
 
     // successfull call - retry the GET request above 
 
     }) 
 
     .err(function (error) { 
 
     // handle manual user login because of expired refresh_token 
 
     }) 
 
    })

+0

Weil jede einzelne axios Anfrage ist asynchron, müssen Sie die Wiederholung entweder async durchführen oder dieses Verhalten im Backend behandeln (dh wenn die erste Axios-Anfrage im Backend fehlschlägt, machen Sie etwas anderes, bevor Sie eine Antwort senden) – Jayce444

+0

Nehmen Sie den asynchronen Wiederholungsversuch vor ist in Ordnung, aber ich kämpfe auf, wie man es implementiert, ohne den Code des GET-Aufrufs manuell zu kopieren – DavidN

Antwort

0

Wickeln Sie den Code in einer Funktion:

const fn =() => axios 
 
    .get('http://myapilink.com/users', { 
 
     headers: { 
 
     'access_token': access_token, 
 
     'Content-Type': 'application/json' 
 
     } 
 
    }) 
 
    .then(function (response) { 
 
    // successfull call 
 
    }) 
 
    .err(function (error) { 
 
    // fire an another axios call before retrying the GET request above 
 
    axios 
 
     .post('http://myapilink.com/refresh_token', { 
 
     headers: { 
 
      'refresh_token': refresh_token, 
 
      'Content-Type': 'application/json' 
 
     } 
 
     }) 
 
     .then(function (response) { 
 
     // successfull call - retry the GET request above 
 
     fn() 
 
     }) 
 
     .err(function (error) { 
 
     // handle manual user login because of expired refresh_token 
 
     }) 
 
    }) 
 

 
// execute it to start fetching 
 
fn()

0

Wesentlichen es, wenn Sie wollen Kette asynchrone HTTP-Anfragen, wäre am besten, jeden Schritt zu behandeln (vorausgesetzt, Sie haben nicht wie 50 Schritte). Für reagieren, in Pseudo-Code würde es aussehen:

Set state (loading first option -> true) 
Axios -> send off first request 
If first request in successful, set state (request success -> true) 
else set state (loading second option -> true) 
if second request is successful, set state (request success -> true) 
else set state (http request overall -> failed) 

Dann in Ihrer Render-Funktion eine entsprechende Meldung angezeigt werden entsprechend dem Zustand (das heißt, wenn es mit dem ersten man sagen, „Laden“ versuchen, wenn es die zweite ist geladen Backup eins sagen "Laden sekundäre Ressource", wenn beide Anfragen fehlschlagen sagen "Anfrage fehlgeschlagen" und tun, was Fehlerbehandlung Sie wollen, wenn einer von ihnen erfolgreich ist dann tun, was Sie mit den Ergebnissen benötigen)

+0

das ist, was ich versuche, aber nicht in Pseudocode :) – DavidN

Verwandte Themen