开发者问题收集

使用 async/await 时可能出现未处理的承诺拒绝

2018-03-24
12309

在 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 块中。

已更新
这是错误函数:

function error(value) {
    if (console) {
        console.error(value)
    }
}
2个回答

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

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

因此隐藏了您的 error() 函数。更改为此(两个符号使用不同的名称):

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

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

jfriend00
2018-03-25

调用此函数的方法也应该处理错误,可能在你的 React 类上

Bruno Mazzardo
2018-03-24