2017-08-29 1 views
1

Dans une application vue.js, j'ai cette partie qui traite des données pour fetching illimité pagination:Comment casser la promesse axios avec conditionnel?

fetchData() { 
     this.loading = true 
     this.page++; 
     axios.get(this.BASE_URL + '/api/jokes/'+'?page='+this.page).then(response => 
      this.jokes = response.data) 
      .then(if (this.jokes.length == null) {throw new Error("end of pagination")}) 
      .catch(function (error) { 
      });  
    document.body.scrollTop = document.documentElement.scrollTop = 0; 
    this.loading = false;  
    }; 

Je veux arrêter le rendu vide jokes et sortir de la fonction si la réponse est vide. Comme vous pouvez le voir dans le abouve de code, je mets un conditionnel dans un autre temps, mais obtiens l'erreur sur le if:

Module build failed: SyntaxError: Unexpected token (169:20) 

Je me demande quelle est la bonne façon d'y parvenir?

+0

Ajouter des parenthèses '{}' dans le rappel 'then'. – alexmac

+0

@alexmac pouvez-vous élaborer comment? Je suis nouveau à js trucs. – Karlom

+0

Vous n'avez pas d'expression de fonction autour de votre instruction 'if '. – Bergi

Répondre

1

Le problème dans votre code est que votre then rappel défini de manière incorrecte.

.then(() => if (this.jokes.length == null) {throw new Error("end of pagination")}) 

Vous devez envelopper avec des supports {}:

.then(() => { 
    if (this.jokes.length == null) { 
    throw new Error("end of pagination") 
    } 
}) 

Un autre problème est que, vous avez défini un rappel then supplémentaire et valide de manière incorrecte ce tableau jokes est un vide (au lieu de this.jokes.length === null, validons que il est défini et sa longueur est égale à zéro):

.then(response => { 
    let jokes = response.data; 
    if (!jokes || jokes.length === 0) { 
    throw new Error("end of pagination"); 
    } 
    this.jokes = jokes; 
}); 
+0

Il en résulte 'Uncaught (en promesse) Erreur: fin de la pagination' même à la première page. Donc je suppose que le conditionnel doit être réécrit. – Karlom

+0

Êtes-vous sûr que «blagues» n'est pas vide à la première page? Ajoutez 'console.log (blagues)' en haut du callback. – alexmac

+0

Oui, il y a des blagues jusqu'à la 6ème page. – Karlom

1

Vous avez à attach une fonction callback à thenpromesse.

fetchData() { 
    this.loading = true 
    this.page++; 
     axios.get(this.BASE_URL + '/api/jokes/'+'?page='+this.page).then(function(response){ 
      this.jokes = response.data; 
      return this.jokes; 
     }).then(function(response){ 
      if (!response || response.length == 0) { 
      throw new Error("end of pagination") 
      } 
     }).catch(function (error) { 

     });   
    document.body.scrollTop = document.documentElement.scrollTop = 0; 
    this.loading = false;  
} 

ou utiliser une fonction arrow et wrap la condition avec {}.

.then(()=>{ 
     if (this.jokes.length == null) { 
      throw new Error("end of pagination") 
     } 
    } 
}) 
+0

Cela supprime l'erreur. Mais j'ai toujours une dernière page qui ne contient rien, ce qui est exactement ce que je veux éviter. Une idée de comment le faire? – Karlom

+0

@Karlom, oui, il suffit de retourner les données en premier 'then'. –