簡體   English   中英

如何在承諾中使用await fetch(),以免違反eslint規則no-async-promise-executor?

[英]How can I use await fetch() in a promis so that it doesn't violate the eslint rule no-async-promise-executor?

我的代碼違反了eslint規則no-async-promise-executor,但是我不確定如何重構它,以便它在new Promise(async (resolve, reject) => {});中沒有async new Promise(async (resolve, reject) => {}); 我的代碼充滿了這些,並且我猜想它會導致錯誤被bot捕獲,因此我可以使用一些幫助來了解如何更好地解決此問題。

這是一個示例函數:

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);
        }
    });
};

async函數總是返回promise。

通過將匿名async函數包裝在new Promise(...)您將創建一個Promise,它僅且始終采用異步函數返回的promise。

只需擺脫包裝器,將您的resolve調用替換為return ,將您的reject替換為throw

updateUser = async () => {
    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";
        }
    } catch (error) {
        console.log("error: ", error);
        throw 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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM