Javascript обещают ждать значения AccessToken

-2

Я получил огромную проблему с пониманием значений, я получил функцию, которая получает массив с токеном доступа, и я передаю этот токен на ajax url, чтобы получить данные json. Я знаю, что мне нужно использовать там обещание запустить ajax после того, как я получу токен доступа. Не могли бы вы помочь мне с этим?

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?
Теги:
promise

2 ответа

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
    Это выглядит круто, но, к сожалению, я получаю такую ошибку в консоли :( "Uncaught TypeError: this.setState не является функцией"
  • 0
    Oooops ... извините. Я исправил свой ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню