首頁 > web前端 > js教程 > 主體

為什麼在 Promise 鏈中使用 setTimeout 會導致 JSON 解析錯誤?

Susan Sarandon
發布: 2024-10-30 05:49:28
原創
396 人瀏覽過

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

在Promise 鏈上使用setTimeout

在嘗試探索Promise 時,您嘗試使用初始請求獲取一組連結並獲取連結的內容使用後續請求的第一個連結。為了在返回下一個 Promise 物件之前引入延遲,您使用了 setTimeout。然而,這種方法遇到了一個 JSON 解析錯誤,當 setTimeout() 被消除後,該錯誤就會消失。

為了闡明這個錯誤,重要的是要理解,為了保持 Promise 鏈的連續性,你不能像這樣使用 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 對象,從而允許您採用更簡潔的語法:

<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 鏈中使用 setTimeout 會導致 JSON 解析錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!