위와 똑같음.
function reqListener() {
var data = JSON.parse(this.responseText);
console.log(data);
}
function reqError(err) {
console.log('Fetch Error :-S', err);
}
var oReq = new XMLHttpRequest();
oReq.onload = reqListener;
oReq.onerror = reqError;
oReq.open('get', './api/some.json', true);
oReq.send();
fetch('./api/some.json')
.then(
function(response) {
if (response.status !== 200) {
console.log('Looks like there was a problem. Status Code: ' +
response.status);
return;
}
// Examine the text in the response
response.json().then(function(data) {
console.log(data);
});
}
)
.catch(function(err) {
console.log('Fetch Error :-S', err);
});
basic, cors, opaque
위 타입들은 응답을 어떻게 대해야 하는지 알려준다.
basic: 제한 없음
cors: 다른 origin에서 리소스가 만들어졌을 때 cors header를 반환. Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma 등을 보는 것을 제한함
opaque: cors 헤더를 리턴하지 않는 다른 origin 의 리소스를 위해 만들어진 응답. 요청 성공 여부를 확인할 수 없음.
same-origin
은 적절한 cors 헤더를 리턴하는 같은 origin의 에셋들에서 온 요청들만 허용함.
cors
는 cors 헤더를 제대로 리턴하는 경우 다른 origin 도 허용
cors-with-forced-preflight
는 요청 전에 항상 preflight check를 한다
no-cors
는 다른 origin 에게는 opaque 응답을 준다. 현재 윈도우 글로벌 스코프에서는 사용할 수 없다.
fetch('http://some-site.com/cors-enabled/some.json', {mode: 'cors'})
.then(function(response) {
return response.text();
})
.then(function(text) {
console.log('Request successful', text);
})
.catch(function(error) {
log('Request failed', error)
});
function status(response) {
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response)
} else {
return Promise.reject(new Error(response.statusText))
}
}
function json(response) {
return response.json()
}
fetch('users.json')
.then(status)
.then(json)
.then(function(data) {
console.log('Request succeeded with JSON response', data);
}).catch(function(error) {
console.log('Request failed', error);
});
Promise 내부에서 명시적으로 거부(rejected) 상태가 되는 경우:
Promise.reject('Error message');
Promise 내부에서 발생한 오류를 명시적으로 던지는 경우:
throw new Error('Error message');
Promise 체인 내부에서 발생한 오류가 처리되지 않은 경우:
new Promise((resolve, reject) => {
// 이렇게 처리되지 않은 오류가 발생하면, 자동으로 거부(rejected) 상태가 됩니다.
nonExistentFunction();
});
then 블록에서 발생한 오류:
somePromise
.then((data) => {
throw new Error('Error in then');
})
.catch((error) => {
console.error('Caught error:', error.message);
});