javascript - 根据选项将 axios.get URL 传递到 axios.all

标签 javascript arrays vue.js promise axios

我正在构建一个 vue 应用程序,它将根据选择的选项搜索 YouTube channel 。

当该选项为 TRUE 时,我将该字符串推送到一个数组中,该数组保存 axios.get() 请求的 URL。

我正在循环该数组并运行 axios.get() 并返回值。我在 Promise{} 下收到响应,其中包含 [[PromiseValue]] 内的对象。

最后,我将响应组合到 vue 数据元素(catAndDogResults)中,但最终得到一个未定义的结果。

有更好的方法来完成我想做的事情吗?

data () {
  return {
    catVideos: true,
    dogVideos: true,
    catResults: [],
    dogResults: [],
    catAndDogResults: []
  }
},
methods: 
  search: function() {
  var that = this
  var cats =  'https://www.googleapis.com/youtube/v3/search?part=snippet&q=cats'
  var dogs =  'https://www.googleapis.com/youtube/v3/search?part=snippet&q=dogs'
  var urls = []

  if (this.catVideos == true) {
    urls.push(cats)
  }

  if (this.dogVideos == true) {
    urls.push(dogs)
  }

  function getVideos() {
    for (var i = 0; i < urls.length; i++) {
      console.log(axios.get(urls[i])) // returns under [[PromiseValue]]:object
        return axios.get(urls[i])
    }
  }

  axios.all([
    getVideos()
  ])
  .then(axios.spread(function (catRes, dogRes) {
    that.catResults = catRes.data.items
    that.dogResults = dogRes.data.items
    that.catAndDogResults = that.catResults.concat(that.dogResults)
  }))
}

编辑

修正拼写错误

最佳答案

尝试更改 getVideos() 方法以在 for 循环之后返回数组:

function getVideos() {
    var requests = [];
    for (var i = 0; i < urls.length; i++) {
        requests.push(axios.get(urls[i]));
    }
    return requests;
}

然后,这样调用它:

axios.all(getVideos())
     .then(function (catRes, dogRes) { ... })

关于javascript - 根据选项将 axios.get URL 传递到 axios.all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48324792/

相关文章:

C++文件写入/读取

javascript - 数组构建正则表达式的多个选项

javascript - 确定被点击的 <li> 项的 .length 索引

javascript - 从现有 html 自动生成 html 源文档

javascript - 如何在 gulp 任务中运行 shell 命令并检测它何时完成?

javascript - Vue 中如何从名称数组中选择随机名称?

vue.js - 从数组中删除组件,vuejs 删除了错误的组件

javascript - 使用 QUnit 测试 Angular.js

javascript - 如何扩展 Array.prototype.push()?

vue.js - 如何测试 vue vuetify v-autocomplete