javascript - 使用 async/await 可能出现未处理的 Promise 拒绝

标签 javascript react-native promise async-await

在 ReactNative 组件中,当我按下按钮时,我在执行此函数时收到“可能未处理的 promise 拒绝”错误:

async onAdd(item) {
    try {
        const response = await fetch('url', {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({
                event_id: item.id,
                event_type: item.event_type,
            })
        });
        const responseJson = await response.json();
    } catch (error) {
        error(error);
    }
}

我不知道为什么,因为它在 try/catch block 中。

已更新
这是错误函数:

function error(value) {
    if (console) {
        console.error(value)
    }
}

最佳答案

问题是您在此处使用 catch 参数重新定义符号 error:

} catch (error) {
    error(error);
}

这样就隐藏了你的 error() 函数。更改为(两个符号的名称不同):

} catch (err) {
    error(err);
}

因此,当您尝试调用 error(error) 时,您正在尝试执行一个抛出异常的非函数,这会导致 onAdd() 拒绝 promise 异步函数返回并且您在该函数调用上没有 .catch() 处理程序(因为您认为它不会拒绝)。而且,只要您编写的 catch() 处理程序不会抛出自身,那么您的 promise 就不会拒绝,但您的编码错误会导致它抛出。

关于javascript - 使用 async/await 可能出现未处理的 Promise 拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49469708/

相关文章:

JavaScript- "Image not found"除非我刷新页面

reactjs - 使用 async componentDidMount() 好吗?

react-native - 混合 Jest 期待与排毒期待

javascript - 调用停止时 jquery 动画队列 promise 会发生什么

javascript - Shiny 的 HTML UI 受 Javascript OnLoad 限制?

javascript - 如何将数组中的所有值四舍五入到小数点后两位

javascript - Selenium WebdriverJS Promise 循环

javascript - 当 promise 没有任何返回时怎么办?

javascript - Ember.js 中的嵌套路由

typescript - 为 react 导航 Prop 添加强类型