获得正确的数据,但不是我期望的数据

时间:2016-04-10 03:23:23

标签: javascript asynchronous promise async-await ecmascript-next

我的代码正在运行。但我很确定有一种更简单的方法可以做到这一点。现在的样子,我可以通过访问Promise中的'_v'键来获得我需要的结果。这就是为什么我认为我做错了什么。这是代码:

file1.js

import * as Utils from '../js/utils';

albumsArray() {
    this.albums = Utils.getAlbums(this.user, this.token);
}

utils.js

export async function getAlbums(user, token){
  let store = []
  let data = await axios.get(`https://api.imgur.com/3/account/${user}/albums/`, {
    headers: {
      Authorization: `Bearer ${token}`,
      Accept: 'application/json'
    }
  })
  .then(response => {
    response.data.data.map( data => store.push(data))
  })

  return store || [];
}

所以,现在的样子,我在专辑['_ v']中得到了我想要的结果。

Obs:专辑(this.albums)是我记录时的承诺,_v是我需要的数据的关键所在。我做错了什么。如何让我的代码看起来更好?

由于

1 个答案:

答案 0 :(得分:1)

关于async / await的一个很酷的事情就是你得到了实际价值而不是承诺......你可以这样做:

export async function getAlbums(user, token){
  let response = await axios.get(`https://api.imgur.com/3/account/${user}/albums/`, {
    headers: {
      Authorization: `Bearer ${token}`,
      Accept: 'application/json'
    }
  })
  return response.data.data || [];
}

您正在将response.data.data中的所有内容推送到商店...为什么不返回response.data.data本身?

然后file1.js也应该使用async / await,这样你就得到数组而不是一个承诺...

async albumsArray() {
    this.albums = await Utils.getAlbums(this.user, this.token);
}

有道理吗?