猿问

在承诺链上使用setTimeout

在这里,我试图绕过Promise.Here在第一个请求时获取一组链接。在下一个请求时,我获取第一个链接的内容。但是我想在返回下一个Promise对象之前进行延迟。所以我使用setTimeout,但是它给了我下面的JSON错误(without setTimeout() it works just fine)


SyntaxError:JSON.parse:JSON数据的第1行第1列出现意外字符


我想知道为什么会失败?


let globalObj={};

function getLinks(url){

    return new Promise(function(resolve,reject){


       let http = new XMLHttpRequest();

       http.onreadystatechange = function(){

            if(http.readyState == 4){

              if(http.status == 200){

                resolve(http.response);

              }else{

                reject(new Error());

              }

            }           

       }

       http.open("GET",url,true);

       http.send();

    });

}


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

    setTimeout(function(){

         return getLinks(globalObj["two"]+".txt"); // without setTimeout it works fine 

         },1000);

});


SMILET
浏览 347回答 3
3回答

慕婉清6462132

.then(() => new Promise((resolve) => setTimeout(resolve, 15000)))

斯蒂芬大帝

较短的ES6版本的答案:const delay = t => new Promise(resolve => setTimeout(resolve, t));然后您可以执行以下操作:delay(3000).then(() => console.log('Hello'));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答