动态

详情 返回 返回

如何獲取 fetch 返回數據 - 动态 详情

獲取 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 评论

Some HTML is okay.