【问题标题】:Axios returning a promise objectaxios 返回一个 promise 对象
【发布时间】:2021-08-29 15:43:45
【问题描述】:

我正在尝试使用 Axios 通过 async/await 进行 API 调用。 API 代码正在运行,但是我得到的是一个 promise 对象,而不是我期望的数据数组。

控制台日志:

{<pending>}[[Prototype]]: Promise[[PromiseState]]: "fulfilled"[[PromiseResult]]: Array(10)0: 

代码

import React, { useEffect, useState } from "react";
import axios from "axios";

const apiTest = async (props) => {
  try {
    const payload = await axios({
      method: "get",
      url: "https://jsonplaceholder.typicode.com/users",
      responseType: "json"
    });

    return payload.data;
  } catch (err) {
    console.log(`error found of type ${err}`);
  }
};

export default apiTest;

【问题讨论】:

  • 这就是应该发生的——异步函数总是返回承诺。

标签: javascript reactjs redux axios


【解决方案1】:

异步函数不会像非异步函数那样返回值。

他们实际上返回的承诺是:

  1. 用返回值解决。
  2. 拒绝并抛出错误。

所以你可以像这样使用你的数据:

apiTest().then(data=> ...

【讨论】:

  • 我知道我在哪里感到困惑。非常感谢!
【解决方案2】:

像这样调用你的函数

apiTest().then(response=>{
    console.log(response.data)
});

【讨论】:

    【解决方案3】:

    如果您想坚持使用 async/await,只需在调用 apiTest 函数之前添加 await。 因为你不能标记async useEffect 回调,你可以在你的组件中添加apiTest 函数,而不是返回payload.data,你必须用payload.data设置你的状态

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2020-04-30
      • 2017-09-13
      • 2021-05-18
      • 2016-12-27
      • 2017-11-11
      • 2019-05-08
      • 2022-09-27
      • 2019-05-31
      相关资源
      最近更新 更多