Hier versuche ich meinen Kopf um Versprechen zu wickeln.Hier auf erste Anfrage hole ich eine Reihe von Links.und bei der nächsten Anfrage hole ich den Inhalt der ersten Link.Aber ich möchte eine Verzögerung vor nächste Versprechen der Rückkehr object.So i setTimeout verwenden auf it.But es gibt mir die folgende JSON Fehler (without setTimeout() it works just fine
)mit setTimeout auf Versprechen Kette
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
ich möchte wissen, warum es nicht funktioniert?
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);
});
Beachten Sie, dass 'return' funktionsspezifisch ist und nur zu der übergeordneten Funktion zurückkehrt und dass Sie nicht von einer asynchronen Methode zurückkehren können. – adeneo
Beachten Sie, dass es [viel bessere Möglichkeiten] (http://stackoverflow.com/q/28250680/1048572) gibt, diesen Code zu strukturieren, als ein 'globalObj' zu verwenden. – Bergi
Wohin wirft 'JSON.parse'? Ich finde es schwer zu glauben, dass, ob es ein "setTimeout" in einem "then" Callback gibt, den Anruf im vorherigen 'then' Callback beeinflusst. – Bergi