You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ReactJS前端调用Node.js后端的Axios all接口获取数据?

解决React调用Node.js后端API返回Pending Promise的问题

前端问题修复

axios.get() 是异步函数,直接赋值变量会得到一个未完成的Promise,所以你看到Promise { <state>: "pending" }。必须通过async/await或者.then()语法等待Promise完成,才能拿到实际数据。

正确写法1:async/await + useEffect

React组件函数不能直接标记为async,需在useEffect里封装异步逻辑:

import { useEffect, useState } from 'react';
import axios from 'axios';

function From () {
    const [data, setData] = useState(null);
    const [error, setError] = useState(null);

    useEffect(() => {
        const fetchData = async () => {
            try {
                const response = await axios.get('http://localhost:5000/arrival');
                // 拿到后端返回的实际数据
                setData(response.data);
                console.log(response.data);
            } catch (err) {
                setError(err.message);
                console.error('请求失败:', err);
            }
        };

        fetchData();
    }, []); // 空依赖数组确保组件挂载时仅请求一次

    return (
        <div>
            {error && <p>错误:{error}</p>}
            {data && (
                <div>
                    <h3>用户信息</h3>
                    <p>用户名:{data.user.login}</p>
                    <p>仓库数量:{data.repos.length}</p>
                </div>
            )}
        </div>
    );
}

正确写法2:.then()链式调用

如果习惯传统Promise写法,也可以用链式调用处理:

import { useEffect, useState } from 'react';
import axios from 'axios';

function From () {
    const [data, setData] = useState(null);
    const [error, setError] = useState(null);

    useEffect(() => {
        axios.get('http://localhost:5000/arrival')
            .then(response => {
                setData(response.data);
                console.log(response.data);
            })
            .catch(err => {
                setError(err.message);
                console.error('请求失败:', err);
            });
    }, []);

    // 渲染逻辑同上
}

后端代码优化

你的后端代码存在两个问题:一是混用await和.then()导致可读性差,二是未接收req/res参数,无法向前端返回响应。优化后的代码如下:

import axios from 'axios';

export async function getArrivalPorts(req, res) { // 必须接收req和res参数
    const endpoints = [
        'https://api.github.com/users/ejirocodes',
        'https://api.github.com/users/ejirocodes/repos',
        'https://api.github.com/users/ejirocodes/followers',
        'https://api.github.com/users/ejirocodes/following'
    ];

    try {
        // 等待所有请求完成
        const responses = await axios.all(endpoints.map(endpoint => axios.get(endpoint)));
        // 解构每个响应的data
        const [userRes, reposRes, followersRes, followingRes] = responses;
        const result = {
            user: userRes.data,
            repos: reposRes.data,
            followers: followersRes.data,
            following: followingRes.data
        };
        // 向前端返回JSON格式数据
        res.json(result);
    } catch (errors) {
        console.error('GitHub API请求失败:', errors);
        // 返回错误状态码和信息
        res.status(500).json({ error: '数据获取失败' });
    }
}

内容的提问来源于stack exchange,提问作者Josip Marić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:35:22