2016-07-26 151 views
-1

我得到了解值的巨大問題我得到的功能,獲取數組與訪問令牌,我傳遞這個令牌到AJAX網址獲取JSON數據。我知道我需要使用那裏承諾在獲得訪問令牌後運行ajax。你能幫我解決這個問題嗎?Javascript承諾等待AccessToken值

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

哪裏是代碼getAccessToken? – binariedMe

回答

0

讓你的函數getAccessToken返回一個承諾

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

嘗試是這樣的

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

這看起來很酷,但不幸的是我得到這種錯誤在控制檯:( 「未捕獲TypeError:this.setState不是一個函數」 –

+0

oooops ...抱歉,我已更正我的答案 –