獲取 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');
});