Aquí estoy tratando de entender las promesas. Aquí, en la primera solicitud, obtengo un conjunto de enlaces. Y en la siguiente solicitud, obtengo el contenido del primer enlace. Pero quiero hacer un retraso antes de devolver el siguiente objeto de promesa. Así que uso setTimeout en él. Pero me da el siguiente error JSON ( without setTimeout() it works just fine
)
SyntaxError: JSON.parse: carácter inesperado en la línea 1, columna 1 de los datos JSON
me gustaría saber por qué falla?
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
tira? Me resulta difícil de creer que si hay setTimeout
una then
devolución de llamada en uno afecta la llamada en la then
devolución de llamada anterior .
return
es específica de la función y solo regresa a la función principal, y que no puede regresar de un método asincrónico.