Почему я получаю [Обещание объекта], как работать с обещанием - PullRequest
0 голосов
/ 13 июня 2019

Я новичок в Vue.js и Axios.Работа с обещанием всегда смущает меня.

Может кто-нибудь направить меня сюда.Я вызываю API в поисках access_token.

Я хочу сохранить этот токен и использовать его в отдельном другом вызове API.

Я пробовал варианты axios, fetch, request, syn-запрос.Axios - это то, что я хочу использовать.

<template>
   <div class="col-xs-6">
      <label>Access Token:</label>
      <input type="text" name="name1" v-model="token">
  </div>
</template>
<script>

import axios from 'axios'

/* eslint-disable */
export default {
  data () {
    return {
      token: ''
    }
  },
  mounted () {
    this.token = this.displayAccessToken()
    console.log('token:'+this.token)
  },
  methods: {
    displayAccessToken(){
      function getAccessToken(){
        return axios({
          method: 'POST',
          'url': 'my_api_end_point',
          'auth': {
            'username': 'my_username',
            'password': 'my_password'
          },
          'headers': {
            'content-type': 'application/json'
          }
        }).then(function(response) {
          console.log('response:' + response)
          return response.data.access_token;
        });
      }

      async function saveToken(){
        let output = await getAccessToken()
        return output
      }

     return saveToken();
    }
  }
}
</script>

1 Ответ

0 голосов
/ 13 июня 2019

Я полагаю, вы слишком усложняете процесс получения ответов.Посмотрите, помогают ли следующие настройки, и, пожалуйста, обязательно вызывайте только следующие API впоследствии (сразу после того, как установлен token), то есть, когда разрешен первый Promise.

export default {
  data () {
    return {
      token: ''
    }
  },

  async mounted () {
    await this.displayAccessToken();

    console.log('token:' + this.token);
  },

  methods: {
    async displayAccessToken() {
      this.token = await axios({
        method: 'POST',
        'url': 'my_api_end_point',
        'auth': {
          'username': 'my_username',
          'password': 'my_password'
        },
        'headers': {
          'content-type': 'application/json'
        }
      })
      .then(function(response) {
        console.log('response:' + response);

        return response.data.access_token;
      });
    }
  }
}

Также, если весь этот метод возвращает токен, я бы, вероятно, сделал его функцией void и вместо этого вызвал бы метод setAccessToken, но, конечно, это зависело бы от вашего варианта использования.

...