fetch('/api')
/*
{
"items": [
{"id": "Open"},
{"id": "OpenNew", "label": "Open New"},
{"id": "Find", "label": "Find..."},
{"id": "FindAgain", "label": "Find Again"},
{"id": "Copy"},
{"id": "CopyAgain", "label": "Copy Again"},
{"id": "CopySVG", "label": "Copy SVG"},
{"id": "ViewSVG", "label": "View SVG"},
{"id": "ViewSource", "label": "View Source"},
]
}
*/
위와 같은 API가 있다고 가정했을 때, `fetch('/api')`는 Promise를 반환하게 된다. 이를 Observable 객체로 다뤄보자.
const http$ = Observable.create(observer => {
fetch('/api')
.then(response => {
return response.json();
})
.then(body => {
observer.next(body); // Subscriber에게 데이터 전달
observer.complete(); // 데이터 전달 완료
})
.catch(err => {
observer.error(err);
})
});
console.log(http$); // 아무것도 로깅되지 않음.
위처럼 http$라는 Observable객체를 만들고, console.log(http$)를 해도 아무것도 찍히지 않는다.
왜냐하면 subscribe하지 않았기 때문이다.
http$.subscribe(
items => console.log(items),
() => {},
() => console.log('finished!')
)
/* console.log(items)
{
"items": [
{"id": "Open"},
{"id": "OpenNew", "label": "Open New"},
{"id": "Find", "label": "Find..."},
{"id": "FindAgain", "label": "Find Again"},
{"id": "Copy"},
{"id": "CopyAgain", "label": "Copy Again"},
{"id": "CopySVG", "label": "Copy SVG"},
{"id": "ViewSVG", "label": "View SVG"},
{"id": "ViewSource", "label": "View Source"},
]
}
*/
subscribe 후, 데이터를 확인가능해졌다.
'JS TS' 카테고리의 다른 글
[Node] class 혹은 function의 file path를 찾아보자 (0) | 2023.11.16 |
---|---|
[TypeScript] Decorator를 이용한 코드 변경 (0) | 2023.11.07 |
[RxJS - 4] pipe(), map() (0) | 2023.10.06 |
[RxJS - 2] Observable의 파라미터 (0) | 2023.09.26 |
[RxJS - 1] Observable이란? (0) | 2023.09.25 |
댓글