我的代码违反了 eslint 规则 no-async-promise-executor但我不知道如何重构它,以便它在 new Promise(async (resolve,reject) => {});
中没有 async
陈述。我的代码充满了这些,我想这会导致编译器无法捕获错误。我需要一些帮助才能更好地理解这个问题
这是一个示例函数:
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);
}
});
};
最佳答案
当你将函数标记为异步时,它会自动将返回值包装在一个 Promise 中,无论你从函数返回什么......它将被传递给 .then() ,并且无论在异步函数中抛出什么都会得到传递给您的错误处理程序,例如 .catch()
这是您可以执行的操作的示例。
const updateUser = async () => {
const url = "/getUser";
let response;
try {
response = await fetch(url);
} catch (error) {
throw new Error(error);
}
return response;
}
您还可以显式引用全局 Promise 以在异步函数内返回或拒绝值。
const updateUser = async () => {
const url = "/getUser";
let response;
try {
response = await fetch(url);
} catch (error) {
Promise.reject(error);
}
return Promise.resolve(response);
}
关于javascript - 如何在 promise 中使用 `await fetch()` ,以免违反 `no-async-promise-executor` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57478783/