Javascript 在异步等待函数中抛出错误并从何处捕获';这叫什么
我们如何从调用异步等待函数的位置捕获该函数的错误 例如,我有一个React组件,它调用从另一个模块导入的异步等待函数。当我使用Javascript 在异步等待函数中抛出错误并从何处捕获';这叫什么,javascript,reactjs,asynchronous,async-await,es6-promise,Javascript,Reactjs,Asynchronous,Async Await,Es6 Promise,我们如何从调用异步等待函数的位置捕获该函数的错误 例如,我有一个React组件,它调用从另一个模块导入的异步等待函数。当我使用Promise.reject(“发生未知事件”)console.log(e))中获得错误呢 我甚至试着抛出“未知事件”,但似乎不起作用 反应成分 const handleSubmit=async(e)=>{ e、 预防默认值(); 添加(表单数据、代码) 。然后(()=>router.push(“/dashboard/manage”)) .catch((e)=>setEr
Promise.reject(“发生未知事件”)那么在我的React组件中,为什么我不能在asyncwaitfunction.catch((e)=>console.log(e))
中获得错误呢
我甚至试着抛出“未知事件”
,但似乎不起作用
反应成分
const handleSubmit=async(e)=>{
e、 预防默认值();
添加(表单数据、代码)
。然后(()=>router.push(“/dashboard/manage”))
.catch((e)=>setError(e));//我希望在这里捕获错误
};
functions.js
export const addUser=async(详细信息,代码)=>{
const isExist=等待isUser(代码);
如果(!isExist){
const add=db.batch();//firebase批写入
add.set(userID(code),details);//向数据库添加详细信息
add.commit()
.catch((e)=>{
console.log(e);//发生错误
Promise.reject(“发生未知错误”);//这不会在组件中捕获。
});
}否则{
承诺。拒绝(“已经存在!”);
}
};
只有在以下情况下,才会捕获被拒绝的承诺(来自您构建的被拒绝承诺,或来自承诺。拒绝
):
- 将
添加到该承诺表达式的末尾,或.catch
- 该承诺表达式在异步函数或
和异步函数的调用者或中返回。然后
回调,出现一个之后返回。然后
.catch
export const addUser = async (details, code) => {
const isExist = await isUser(code);
if (isExist) {
return Promise.reject('Already Exists!');
}
const add = db.batch(); //firebase batch write
add.set(userID(code), details); //Add details to databse
return add.commit().catch((e) => {
console.log(e); // error occurs confirmed
return Promise.reject("Unknown error occurred");
});
};
但是您真的需要登录.commit().catch
?如果没有,只返回调用方中的commit
Promise和catch会更干净:
export const addUser = async (details, code) => {
const isExist = await isUser(code);
if (isExist) {
return Promise.reject('Already Exists!');
}
const add = db.batch(); //firebase batch write
add.set(userID(code), details); //Add details to databse
return add.commit();
};
从异步函数执行或返回的承诺将使其错误(或其解析值)渗透到异步函数的调用方。
await add.commit()代码>此操作有效
。。。我怀疑。您想要返回或抛出被拒绝的承诺(或直接抛出错误)我可能对这一行错了,之前我使用的throw
曾经有效。不确定是否承诺。拒绝。如果我能增加更多的选票,那将是一百万。太好了!还感谢清洁剂if
声明建议。顺便说一句,我仍然会返回commit.catch((e)=>Promise.reject(“未知错误发生”)
,因为我不想捕获组件中的整个错误对象,所以我会将其用于自定义消息,只是为了显示发生了一些错误,而没有更多信息。