【问题标题】:Multiple Axios Requests Into Vue多个 axios 请求进入 Vue
【发布时间】:2020-07-16 23:09:09
【问题描述】:

我在 Vue JS 应用程序中使用了两个不同的 json 端点。目前我在主页视图中显示帖子。然后使用 Vue 路由器,我正在创建一个包含更具体帖子信息的详细信息视图。如果评论 ID 与帖子 ID 匹配,我希望 cmets 从端点 /comments 显示在详细信息视图中。

帖子/posts

cmets/comments

import axios from 'axios'

const instance = axios.create({
  baseURL: 'https://jsonplaceholder.typicode.com/'
})
const basePost = '/posts'
const baseComments = '/comments'

export default {
  fetchPosts () {
    return instance
      .get(basePost)
      .then(response => response.data)
  }
}

如何将两个数组连接成一个,然后将其设置为在视图中检索帖子和 cmets?

【问题讨论】:

    标签: arrays json vue.js axios concatenation


    【解决方案1】:

    由于axios get 返回promise,因此您可以同时调用两者并使用 Promise.all 获取要解决的承诺。

    示例1:使用Promise.all

    //const axios = require("axios");
    const instance = axios.create({
      baseURL: "https://jsonplaceholder.typicode.com/",
    });
    const basePost = "/posts";
    const baseComments = "/comments";
    const service = {
      fetchPosts() {
        const promises = [instance.get(basePost), instance.get(baseComments)];
        return Promise.all(promises).then(([posts, comments]) => [
          posts.data,
          comments.data,
        ]);
      },
    };
    service.fetchPosts().then(console.log);
    // export default service;
    .as-console-row {
      color: blue !important;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.2/axios.js"></script>

    注意:如果你想以series的方式表示先发帖,然后评论你可以使用async-await

    示例2:使用async-await

    //const axios = require("axios");
    const instance = axios.create({
      baseURL: "https://jsonplaceholder.typicode.com/",
    });
    const basePost = "/posts";
    const baseComments = "/comments";
    const service = {
      async fetchPosts() {
        const posts = await instance.get(basePost).then((x) => x.data);
        const comments = await instance.get(baseComments).then((x) => x.data);
        //console.log(posts, comments);
        return [posts, comments];
      },
    };
    // export default service;
    
    service.fetchPosts().then(console.log);
    .as-console-row {
      color: blue !important;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.2/axios.js"></script>

    【讨论】:

    • 为清楚起见,您应该在两个示例之间添加注释,或者更好:每个创建一个 sn-p。目前,这个解决方案似乎比实际更大。
    猜你喜欢
    • 2016-11-26
    • 2020-02-14
    • 2021-11-23
    • 2020-06-13
    • 2019-05-06
    • 1970-01-01
    • 2021-04-28
    • 2017-06-06
    • 2017-10-26
    相关资源
    最近更新 更多