fetch() API로 작업할 때 .json() API를 사용할 때 동작에 미묘한 차이가 발생합니다. json() 메서드. 이 동작은 직관에 반하는 것처럼 보일 수 있으므로 근본적인 이유를 자세히 살펴보겠습니다.
기본적으로 .json()은 구문 분석된 JSON 응답으로 확인되는 약속을 반환합니다. 몸. 특히 대규모 응답이나 느린 연결의 경우 응답 본문을 즉시 사용할 수 없기 때문입니다. Promise는 JSON이 완전히 구문 분석될 때까지 후속 코드가 실행되지 않도록 보장합니다.
.json()이 .then() 체인 내에서 사용되는 경우, Promise 객체 자체를 반환하여 추가 작업을 연결할 수 있습니다. 그러나 .json()이 .then() 핸들러에서 직접 반환되면 Promise의 확인된 값(파싱된 JSON)이 대신 반환됩니다. 이는 .then() 핸들러가 추가로 조작할 수 있는 값을 수신할 것으로 예상하기 때문입니다.
예:
제공된 코드 조각에서:
fetch(url) .then(response => { return { data: response.json(), status: response.status } }) .then(post => document.write(post.data));
.json() 메서드는 객체 리터럴 내에 연결되어 있으므로 Promise 객체를 반환하여 결과는 다음과 같습니다. post.data 속성은 Promise입니다.
대체 구문:
fetch(url) .then(response => response.json()) .then(post => document.write(post.title));
이 예에서 .json()은 .then()에서 직접 반환됩니다. 처리기를 사용하여 확인된 JSON 값이 즉시 반환되므로 post.title 속성에 직접 액세스할 수 있습니다.
객체 리터럴과 직접 반환 값 간의 불일치를 방지하려면 다음 구문을 사용할 수 있습니다.
fetch(url) .then(response => response.json().then(data => ({ data: data, status: response.status })
이 접근 방식은 궁극적으로 원하는 값으로 해결되는 중첩 약속을 반환합니다. object.
.json()의 Promise 동작은 그것이 어떻게 실행되는지에 따라 달라집니다. 코드 내에서 사용됩니다. 작업을 연결하면 Promise 객체를 반환하여 적절한 순서를 보장합니다. 그러나 .then() 핸들러에서 직접 .json()을 반환하면 확인된 값(파싱된 JSON)이 반환되므로 즉시 사용할 수 있습니다. Promise를 관리하고 코드에서 예상치 못한 동작을 방지하려면 이 차이점을 이해하는 것이 중요합니다.
위 내용은 Fetch API의 `.json()` 메서드가 다른 Promise 동작을 갖는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!