我的代码违反了 eslint 规则no-async-promise-executorasync但我不知道如何重构它,以便它在语句中没有new Promise(async (resolve, reject) => {});。我的代码充满了这些,我想这会导致编译器无法捕获错误。我需要一些帮助才能更好地理解这个问题
这是一个示例函数:
updateUser = () => {
return new Promise(async (resolve, reject) => {
try {
const url = "/getUser";
const response = await fetch(url);
if (response.ok) {
const user = await response.json();
//
// Do something with user object...
//
} else {
console.log("response", response);
window.location = "/admin";
}
resolve();
} catch (error) {
console.log("error: ", error);
reject(error);
}
});
};
Run Code Online (Sandbox Code Playgroud)
当您将函数标记为异步时,它会自动将返回值包装在 Promise 中,无论您从函数返回什么...它将传递给 .then() ,并且异步函数中抛出的任何内容都会传递给您错误处理程序,例如 .catch()
这是您可以执行的操作的示例。
const updateUser = async () => {
const url = "/getUser";
let response;
try {
response = await fetch(url);
} catch (error) {
throw new Error(error);
}
return response;
}
Run Code Online (Sandbox Code Playgroud)
您还可以显式引用全局 Promise 以在异步函数内返回或拒绝值。
const updateUser = async () => {
const url = "/getUser";
let response;
try {
response = await fetch(url);
} catch (error) {
Promise.reject(error);
}
return Promise.resolve(response);
}
Run Code Online (Sandbox Code Playgroud)