>  기사  >  웹 프론트엔드  >  Promise Chain에서 `setTimeout`을 사용하면 JSON 구문 분석 오류가 발생하는 이유는 무엇입니까?

Promise Chain에서 `setTimeout`을 사용하면 JSON 구문 분석 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-30 05:49:28401검색

Why Does Using `setTimeout` in a Promise Chain Cause a JSON Parsing Error?

Promise Chain에서 setTimeout 사용

Promise를 탐색하기 위해 초기 요청을 사용하여 링크 세트를 가져오고 해당 내용을 가져오려고 시도했습니다. 후속 요청을 사용하는 첫 번째 링크. 다음 Promise 객체를 반환하기 전에 지연을 도입하기 위해 setTimeout을 사용했습니다. 그러나 이 접근 방식에서는 setTimeout()이 제거되면 사라지는 JSON 구문 분석 오류가 발생합니다.

이 오류를 설명하려면 약속 체인의 연속성을 유지하기 위해 setTimeout()을 다음과 같이 활용할 수 없다는 점을 이해하는 것이 중요합니다. 당신은 그랬어요. 그 이유는 .then() 핸들러가 아닌 setTimeout() 콜백에서 프라미스를 반환하므로 노력이 효과가 없기 때문입니다.

대신 간단한 지연 함수 구현을 고려해 보세요.

<code class="js">function delay(t, val) {
    return new Promise(resolve => setTimeout(resolve, t, val));
}</code>

이 지연 함수를 사용하면 다음과 같이 코드를 수정할 수 있습니다.

<code class="js">getLinks('links.txt').then(function(links){
    let all_links = (JSON.parse(links));
    globalObj=all_links;

    return getLinks(globalObj["one"]+".txt");

}).then(function(topic){
    writeToBody(topic);
    // return a promise here that will be chained to prior promise
    return delay(1000).then(function() {
        return getLinks(globalObj["two"]+".txt");
    });
});</code>

이 수정을 통해 .then() 핸들러에서 Promise를 반환할 수 있습니다. 이를 통해 적절하게 연결할 수 있습니다.

또는 지연 메소드를 사용하여 Promise 객체를 확장하여 보다 간결한 구문을 사용할 수 있습니다.

<code class="js">Promise.prototype.delay = function(t) {
    return this.then(function(val) {
        return delay(t, val);
    });
}

Promise.resolve("hello").delay(500).then(function(val) {
    console.log(val);
});</code>

이러한 수정 사항을 통합하면 다음과 같은 작업을 원활하게 수행할 수 있습니다. 약속 체인 내에 지연을 도입하여 발생하는 JSON 구문 분석 오류를 완화합니다.

위 내용은 Promise Chain에서 `setTimeout`을 사용하면 JSON 구문 분석 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.