2016-07-26 8 views
-1

Ich habe ein riesiges Problem mit dem Verstehen von Werten Ich habe Funktion, die Array mit Zugriffstoken bekommen und ich übergebe dieses Token an Ajax URL, um JSON Daten zu bekommen. Ich weiß, dass ich dort ein Versprechen haben muss, Ajax zu laufen, nachdem ich Zugangstoken bekommen habe. Könntest du mir mit diesem helfen?Javascript versprechen warten auf AccessToken Wert

componentDidMount: function() { 
    var component = this; 
    var accessToken = getAccessToken(); 
    $.ajax({ 
     type: 'GET', 
     url: window.APIUrl +'services/?access_token=' + accessToken, 
     dataType: 'json', 
     success: function(response) 
     { 
      component.setState({ 
       services : response 
      }); 
     } 
    }); 
} 

function getAccessToken(){ 
var client_id = '****', 
    client_key = '****', 
    $ = jQuery; 
if(!window.accessToken){ 
    $.ajax({ 
     url : APIUrl + 'auth', 
     method : 'post', 
     data : { 
      'id' : client_id, 
      'key' : client_key 
     }, 
     success: function(response){ 
      if(typeof response.access_token != 'undefined'){ 
       /*console.log(response);*/ 
       window.accessToken = response.access_token; 
       return response.access_token; 
      }else{ 
       return false; 
      } 
     } 
    }); 
}else{ 
    return window.accessToken; 
} 

}

+0

zurückzukehren, wo Code für getAccessToken ist? – binariedMe

Antwort

0

Machen Sie Ihre Funktion getAccessToken ein Versprechen

componentDidMount: function() { 
    var component = this; 
    getAccessToken() 
     .then(function(accessToken) { 
      var url = window.APIUrl +'services/?access_token=' + accessToken, 
      return $.getJSON(url) 
     }) 
     .then(function(response) { 
     component.setState({ 
      services: response 
     }); 
    }); 
} 

function getAccessToken(){ 
    if(window.accessToken) { 
     return $.when(window.accessToken) 
    } 

    return $.ajax(...) // get access token from server 
} 
0

Probieren Sie etwas wie dieses

componentDidMount: function() { 
    var component = this; 
    getAccessToken().then(function(accessToken) { 
    $.ajax({ 
     type: 'GET', 
     url: window.APIUrl +'services/?access_token=' + accessToken, 
     dataType: 'json', 
     success: function(response) 
     { 
      component.setState({ services : response }); 
     } 
    }); 
    }) 
} 

function getAccessToken(){ 
    var deferred = $.Deferred() 

    var client_id = '****', 
     client_key = '****', 
     $ = jQuery; 

    if(!window.accessToken){ 
    $.ajax({ 
     url : APIUrl + 'auth', 
     method : 'post', 
     data : { 
      'id' : client_id, 
      'key' : client_key 
     }, 
     success: function(response){ 
      if(typeof response.access_token != 'undefined'){ 
       /*console.log(response);*/ 
       window.accessToken = response.access_token; 
       deferred.resolve(window.accessToken) 
      } else { 
       deferred.reject() 
      } 
     } 
    }); 
    } else { 
    deferred.resolve(window.accessToken) 
    } 

    return deferred.promise() 
} 
+0

Dieses Aussehen cool, aber leider Im bekommen diese Art von Fehler in der Konsole :( "Uncaught TypeError: this.setState ist keine Funktion" –

+0

oooops ... sorry. Ich habe meine Antwort korrigiert –