ホームページ  >  記事  >  ウェブフロントエンド  >  Promise チェーンで「setTimeout」を使用すると JSON 解析エラーが発生するのはなぜですか?

Promise チェーンで「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 解析エラーが発生します。

このエラーを解明するには、Promise チェーンの連続性を維持するために setTimeout() を次のように利用することはできないことを理解することが重要です。あなたはそうしました。その理由は、.then() ハンドラーからではなく setTimeout() コールバックから Promise を返しているため、努力が無駄になります。

代わりに、単純な遅延関数を実装することを検討してください。

<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>

これらの変更を組み込むことで、シームレスにPromise チェーン内に遅延を導入し、発生する JSON 解析エラーを軽減します。

以上がPromise チェーンで「setTimeout」を使用すると JSON 解析エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。