如何在承诺中使用“await fetch()”,以免违反“no-async-promise-executor”?

Dev*_*v01 0 javascript eslint

我的代码违反了 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)

Dan*_*rns 6

当您将函数标记为异步时,它会自动将返回值包装在 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)