我正在学习Promise,第一次请求我获取了一组链接,然后在下一个请求中获取第一个链接的内容。但我想在返回下一个Promise对象之前先延迟一段时间。所以我在上面使用setTimeout。但它会导致以下JSON错误(如果不使用setTimeout()就可以正常工作
)
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);
});
globalObj
更好的方法来构建这段代码。这里有更好的方式。 - BergiJSON.parse
会在哪里抛出异常?我很难相信一个then
回调函数中是否有setTimeout
会影响到前一个then
回调函数的调用。 - Bergi