Stories

Detail Return Return

如何獲取 fetch 返回數據 - Stories Detail

獲取 fetch 返回數據

Fetch API 提供了一個 JavaScript 接口,用於訪問和操縱 HTTP 管道的一些具體部分,例如請求和響應。

它還提供了一個全局 fetch() 方法,該方法提供了一種簡單,合理的方式來跨網絡異步獲取資源。

這種功能以前是使用 XMLHttpRequest 實現的。

由於以下原因,我們在判斷後端返回數據時候,如果 HTTP 狀態碼錯誤,可能判斷比較麻煩。

當接收到一個代表錯誤的 HTTP 狀態碼時,從 fetch() 返回的 Promise 不會被標記為 reject,即使響應的 HTTP 狀態碼是 404 或 500

相反,它會將 Promise 狀態標記為 resolve(如果響應的 HTTP 狀態碼不在 200 - 299 的範圍內,則設置 resolve 返回值的 ok 屬性為 false),僅當 網絡故障時或請求被阻止時,才會標記為 reject

那麼 如何獲取從 fetch() promise 返回的數據?

由於涉及到異步問題(試圖以同步方式獲取此異步調用的結果),所以通過 .then 回調可以解決。

function checkUserHosting(hostEmail, callback) {
    fetch('http://localhost:3001/activities/')
    .then((response) => { 
        // 注意此處
        response.json().then((data) => {
            console.log(data);
            return data;
        }).catch((err) => {
            console.log(err);
        })
    });
}

或者

const checkUserHosting = async (hostEmail, callback) => {
    let hostEmailData  = await fetch(`http://localhost:3001/activities`)
    
    // 注意此處//use string literals
    let hostEmailJson = await hostEmailData.json();
    return hostEmailJson;
}

示例

await fetch('http://localhost:3001/activities', {
    method: 'POST',
    headers: {
    'Accept': 'application/json, */*',
    'Content-Type': 'application/json;charset=UTF-8',
    'cache': 'default',
    },
    'credentials': 'include', //表示請求是否攜帶cookie
    body: JSON.stringify(data)
}).then((response) => {
    response.json().then((data) => {
    if (data.code === 500) errorMessage = data.msg
        return data;
    }).catch((err) => {
        console.log(err);
    })
}).then((data) => {
    console.log('data is', data)
})
.catch(e => {
    pcConsole.log('get postcat client download link error');
});

Add a new Comments

Some HTML is okay.