【问题标题】:Fetch using asysnc await inside try catch block在 try catch 块中使用 async await 获取
【发布时间】:2021-08-28 03:45:05
【问题描述】:

我无法运行以下代码来尝试从 URL 获取数据。尽管得到了服务器的响应,但它总是会捕获块。

useEffect(() => {
    const fetchSomeData = async () => {
        try {
            await fetch(api);
            if (!response.ok) {
                    throw Error(response.statusText);
            }
            const json = await response.json();
            setData(json);
        } catch (error) {
            console.error(message);
        };
    }
    fetchSomeData();
  }, [api]);

【问题讨论】:

    标签: reactjs ajax ecmascript-6 react-hooks fetch


    【解决方案1】:

    response.ok 是什么?在您的代码中它是未定义的,因为我没有看到在任何地方定义 response,因此检查失败,您将抛出一个错误,随后被 catch 捕获。

    我想你的意思是从 fetch 中分配响应,即:

    try {
        // Assign the resolved promise payload to `response` const
        const response = await fetch(api);
    
        if (!response.ok) {
            throw Error(response.statusText);
        }
        const json = await response.json();
        setData(json);
    } catch (error) {
        console.error(message);
    };
    

    【讨论】:

    • 酷..谢谢...最后一个问题...是一个尝试...catch 块是处理可能从 fetch 调用中抛出的错误的好方法...我认为那里是一个 fetch().then() ...但如果我在这里使用 async...await 不确定如何使用它(这就是我使用 try..catch 块的原因)
    • 这完全取决于您。我个人更喜欢 async/await 方法,因为我不必在 .then() 中创建另一个嵌套级别
    • ok...对于错误处理,您使用上面使用的 try...catch 块吗?基本上我想了解使用 fetch 时上述模式(try...catch 块)是否是标准的
    • 是的,我会这样做。
    猜你喜欢
    • 2019-12-22
    • 2018-06-21
    • 2018-10-17
    • 2021-11-16
    • 2019-03-14
    • 1970-01-01
    • 2019-07-03
    • 2017-11-23
    相关资源
    最近更新 更多