ที่นี่ฉันพยายามห่อหัวของฉันรอบ ๆ คำสัญญาที่นี่ในการร้องขอครั้งแรกฉันดึงชุดของลิงค์และในการร้องขอครั้งต่อไปฉันดึงเนื้อหาของลิงค์แรก แต่ฉันต้องการชะลอก่อนที่จะส่งคืนวัตถุสัญญาถัดไปดังนั้นฉันจึงใช้ setTimeout แต่มันทำให้ฉันมีข้อผิดพลาด JSON ต่อไปนี้ ( without setTimeout() it works just fine
)
SyntaxError: JSON.parse: อักขระที่ไม่คาดคิดที่บรรทัด 1 คอลัมน์ 1 ของข้อมูล JSON
ฉันอยากรู้ว่าทำไมมันถึงล้มเหลว?
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);
});
globalObj
.
JSON.parse
โยน? ฉันคิดว่ามันยากที่จะเชื่อว่ามีการโทรกลับsetTimeout
ในครั้งเดียวthen
ส่งผลต่อการโทรในการthen
โทรกลับครั้งก่อนหรือไม่
return
เป็นฟังก์ชันเฉพาะและส่งกลับไปยังฟังก์ชันหลักเท่านั้นและคุณไม่สามารถส่งคืนจากเมธอด async ได้