2017-09-26 1 views
0

J'ai ce code vue2:fonction Javascript retour toujours non défini

checkUser2() { 
    var returnValue; 
    axios.get(`api/users/CheckUsername/${this.username}`) 
      .then(response => { 
       returnValue = response.data.error === 0; 
      }, errorCallBack => { 
       returnValue = false; 
      }); 
    return returnValue; 
} 

Je l'appelle avec:

var a = this.checkUser2(); 
console.log(a); 

et il revient toujours pas défini. Qu'est-ce que je fais mal?

+6

Il finit * après * la fonction est retournée. – Bert

+0

La valeur returnValue ne sera remplie qu'une fois l'appel ajax terminé. Donc, si vous écrivez le console.log dans le rappel de succès, il sera imprimé. –

Répondre

6

Si vous souhaitez renvoyer la valeur de cette méthode, vous devrez renvoyer la promesse de la fonction et utiliser un rappel pour capturer le résultat en cas de succès.

checkUser2() { 
    return axios.get(`api/users/CheckUsername/${this.username}`) 
     .then(response => response.data.error === 0, errorCallBack => false); 
} 

Et quand vous l'appelez:

this.checkUser2().then(value => console.log(value)) 
0

Je ne sais rien vue2, mais je ne sais que axios travaux sur les promesses, donc, puisque vous revenez returnValue en dehors de votre promesse, votre fonction est renvoie la valeur actuelle de returnValue, à savoir undefined.

0

C'est parce que vous renvoyez la valeur avant que la demande ait été faite. Vous devez faire une Promesse, et quand elle se résout, renvoyez la valeur.

checkUser2() { 
    return new Promise((resolve, reject) => { 

    var returnValue; 
    axios.get(`api/users/CheckUsername/${this.username}`) 
    .then(response => { 
     returnValue = response.data.error === 0; 
     resolve(returnValue); 
    }, errorCallBack => { 
     returnValue = false; 
     reject(returnValue); 
    }); 
    }); 
} 

Ensuite il vous suffit de l'appeler comme celui-ci pour obtenir la valeur:

this.checkUser2().then(val => { 
a = val; 
}) 

espoir que cela vous aide. Car l'appel ajax est asynchrone

+1

axios.get renvoie une promesse. – Bert