Hier versuche ich, meinen Kopf um Versprechen zu wickeln. Hier hole ich auf erste Anfrage eine Reihe von Links. Und auf nächste Anfrage hole ich den Inhalt des ersten Links. Aber ich möchte eine Verzögerung machen, bevor ich das nächste Versprechen zurückschicke. Also benutze ich setTimeout drauf. Aber es gibt mir den folgenden JSON-Fehler ( without setTimeout() it works just fine
)
SyntaxError: JSON.parse: Unerwartetes Zeichen in Zeile 1, Spalte 1 der JSON-Daten
Ich würde gerne wissen, warum es fehlschlägt.
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
wirft? Es fällt mir schwer zu glauben, dass die Frage, ob setTimeout
ein then
Rückruf vorliegt, den Anruf im vorherigen then
Rückruf beeinflusst.
return
funktionsspezifisch ist und nur zur übergeordneten Funktion zurückkehrt und dass Sie nicht von einer asynchronen Methode zurückkehren können.