【问题标题】:How do I destructure a promise returned by axios?如何解构 axios 返回的承诺?
【发布时间】:2020-10-17 18:34:32
【问题描述】:

下面是获取一些数据的代码

    useEffect(async (id) => {
//    const data = await redditFetch(id);
async function redditFetch(id){
    try {
        const {data:{data}} = await axios.get(`https://www.reddit.com/search.json?q=${id}&limit=50`);
        const {children} = data;
        return children.map(data=> data.data);
    } catch (error) {
        console.log(error);
    }
}
const data = redditFetch(id);
setData(data)
},[setData])

console.log(Data);

这是返回的承诺:

Promise {<pending>}
__proto__: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Array(50)

我想要的是 PromiseResult 中的数组。

我也尝试过使用异步等待这样的方法,它返回一个正确的数组。

const PostPage = () => {
    const {id} = useParams();
    const [Data, setData] = useState([])
    
    useEffect(async (id) => {
    //    const data = await redditFetch(id);
    async function redditFetch(id){
        try {
            const {data:{data}} = await axios.get(`https://www.reddit.com/search.json?q=${id}&limit=50`);
            const {children} = data;
            return children.map(data=> data.data);
        } catch (error) {
            console.log(error);
        }
    }
    const data = await redditFetch(id);
    setData(data)
    },[setData])

    console.log(Data);

但随之而来的是一个我无法摆脱的血腥警告:

index.js:1 警告:效果函数不得返回任何内容 除了一个用于清理的函数。

看起来你写了 useEffect(async () => ...) 或者返回了一个 承诺。相反,在你的效果中编写异步函数并调用 立即:

useEffect(() => { 异步函数 fetchData() { // 你可以在这里等待 常量响应 = 等待 MyAPI.getData(someId); // ... } fetchData(); }, [someId]); // 如果效果不需要 props 或 state,则为 []

所以,亲爱的程序员,告诉我该怎么做???

【问题讨论】:

  • 警告信息告诉你该怎么做。它甚至还有示例代码。
  • 我也试过了,但正如我所说,我得到了这个承诺....遗憾的是我不知道如何解构。这就是我在这里的原因
  • 一般来说,我本可以忽略警告,但 Surge 和 GitHub 操作将警告视为错误,并且在警告存在时不会接受我的代码
  • 警告说你应该使用useEffect(() =&gt; { async function ...,而你有useEffect(async () =&gt; { async function ...你能看出区别吗?
  • useEffect 前面的异步..现在我已经删除了..现在我有了这个:

标签: javascript reactjs web axios react-hooks


【解决方案1】:

从 useEffect 返回的任何东西都应该在组件卸载时被清理。最好你可以在那里调用 setData 函数而不是 return。

另一方面,您可以使用立即调用函数 (IIF),然后您不需要解析从 redditFetch 函数返回的承诺。

【讨论】:

    猜你喜欢
    • 2020-12-20
    • 2019-10-24
    • 2020-03-19
    • 2019-07-30
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    相关资源
    最近更新 更多